This commit is contained in:
Jean-Francois Dockes 2019-04-13 09:24:14 +02:00
parent a1d343304a
commit 0a18e8f4e6
38 changed files with 185 additions and 38662 deletions

View File

@ -60,8 +60,10 @@ usermanual-rst: recoll-conf-xml
< usermanual.xml > full-man.xml < usermanual.xml > full-man.xml
sed -i -e '/xi:include/d' -e '/<?xml version="1.0"?>/d' full-man.xml sed -i -e '/xi:include/d' -e '/<?xml version="1.0"?>/d' full-man.xml
test -d sphinx || mkdir sphinx test -d sphinx || mkdir sphinx
pandoc -s --toc -f docbook -t rst full-man.xml > sphinx/usermanual.rst pandoc -s --toc -f docbook -t rst full-man.xml > sphinx/index.rst
(cd sphinx;make html) -@echo fix termmatch and execute
#(cd sphinx;make html)
clean: clean:
rm -f RCL.*.html usermanual.pdf usermanual.html index.html tmpfile.html rm -f RCL.*.html usermanual.pdf usermanual.html index.html tmpfile.html

View File

@ -1,225 +0,0 @@
# Makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = _build
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
.PHONY: help
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " applehelp to make an Apple Help Book"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " epub3 to make an epub3"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " xml to make Docutils-native XML files"
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
@echo " coverage to run coverage check of the documentation (if enabled)"
@echo " dummy to check syntax errors of document sources"
.PHONY: clean
clean:
rm -rf $(BUILDDIR)/*
.PHONY: html
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
.PHONY: dirhtml
dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
.PHONY: singlehtml
singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
.PHONY: pickle
pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."
.PHONY: json
json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."
.PHONY: htmlhelp
htmlhelp:
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in $(BUILDDIR)/htmlhelp."
.PHONY: qthelp
qthelp:
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/recoll.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/recoll.qhc"
.PHONY: applehelp
applehelp:
$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
@echo
@echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
@echo "N.B. You won't be able to view it unless you put it in" \
"~/Library/Documentation/Help or install it in your application" \
"bundle."
.PHONY: devhelp
devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/recoll"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/recoll"
@echo "# devhelp"
.PHONY: epub
epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
.PHONY: epub3
epub3:
$(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3
@echo
@echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3."
.PHONY: latex
latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make' in that directory to run these through (pdf)latex" \
"(use \`make latexpdf' here to do that automatically)."
.PHONY: latexpdf
latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
.PHONY: latexpdfja
latexpdfja:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through platex and dvipdfmx..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
.PHONY: text
text:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/text."
.PHONY: man
man:
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
.PHONY: texinfo
texinfo:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."
.PHONY: info
info:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo "Running Texinfo files through makeinfo..."
make -C $(BUILDDIR)/texinfo info
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
.PHONY: gettext
gettext:
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
@echo
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
.PHONY: changes
changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."
.PHONY: linkcheck
linkcheck:
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/output.txt."
.PHONY: doctest
doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."
.PHONY: coverage
coverage:
$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
@echo "Testing of coverage in the sources finished, look at the " \
"results in $(BUILDDIR)/coverage/python.txt."
.PHONY: xml
xml:
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
@echo
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
.PHONY: pseudoxml
pseudoxml:
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
@echo
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
.PHONY: dummy
dummy:
$(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy
@echo
@echo "Build finished. Dummy builder generates no files."

View File

@ -1,4 +0,0 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 231f945ed2862c51951e13914a8fee2b
tags: 645f666f9bcd5a90fca523b33c5a78b7

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 673 B

View File

@ -1,607 +0,0 @@
@import url("basic.css");
/* -- page layout ----------------------------------------------------------- */
body {
font-family: 'goudy old style', 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro', serif;
font-size: 17px;
background-color: white;
color: #000;
margin: 0;
padding: 0;
}
div.document {
width: 940px;
margin: 30px auto 0 auto;
}
div.documentwrapper {
float: left;
width: 100%;
}
div.bodywrapper {
margin: 0 0 0 220px;
}
div.sphinxsidebar {
width: 220px;
font-size: 14px;
line-height: 1.5;
}
hr {
border: 1px solid #B1B4B6;
}
div.body {
background-color: #ffffff;
color: #3E4349;
padding: 0 30px 0 30px;
}
div.body > .section {
text-align: left;
}
div.footer {
width: 940px;
margin: 20px auto 30px auto;
font-size: 14px;
color: #888;
text-align: right;
}
div.footer a {
color: #888;
}
p.caption {
font-family: ;
font-size: inherit;
}
div.relations {
display: none;
}
div.sphinxsidebar a {
color: #444;
text-decoration: none;
border-bottom: 1px dotted #999;
}
div.sphinxsidebar a:hover {
border-bottom: 1px solid #999;
}
div.sphinxsidebarwrapper {
padding: 18px 10px;
}
div.sphinxsidebarwrapper p.logo {
padding: 0;
margin: -10px 0 0 0px;
text-align: center;
}
div.sphinxsidebarwrapper h1.logo {
margin-top: -10px;
text-align: center;
margin-bottom: 5px;
text-align: left;
}
div.sphinxsidebarwrapper h1.logo-name {
margin-top: 0px;
}
div.sphinxsidebarwrapper p.blurb {
margin-top: 0;
font-style: normal;
}
div.sphinxsidebar h3,
div.sphinxsidebar h4 {
font-family: 'Garamond', 'Georgia', serif;
color: #444;
font-size: 24px;
font-weight: normal;
margin: 0 0 5px 0;
padding: 0;
}
div.sphinxsidebar h4 {
font-size: 20px;
}
div.sphinxsidebar h3 a {
color: #444;
}
div.sphinxsidebar p.logo a,
div.sphinxsidebar h3 a,
div.sphinxsidebar p.logo a:hover,
div.sphinxsidebar h3 a:hover {
border: none;
}
div.sphinxsidebar p {
color: #555;
margin: 10px 0;
}
div.sphinxsidebar ul {
margin: 10px 0;
padding: 0;
color: #000;
}
div.sphinxsidebar ul li.toctree-l1 > a {
font-size: 120%;
}
div.sphinxsidebar ul li.toctree-l2 > a {
font-size: 110%;
}
div.sphinxsidebar input {
border: 1px solid #CCC;
font-family: 'goudy old style', 'minion pro', 'bell mt', Georgia, 'Hiragino Mincho Pro', serif;
font-size: 1em;
}
div.sphinxsidebar hr {
border: none;
height: 1px;
color: #AAA;
background: #AAA;
text-align: left;
margin-left: 0;
width: 50%;
}
/* -- body styles ----------------------------------------------------------- */
a {
color: #004B6B;
text-decoration: underline;
}
a:hover {
color: #6D4100;
text-decoration: underline;
}
div.body h1,
div.body h2,
div.body h3,
div.body h4,
div.body h5,
div.body h6 {
font-family: 'Garamond', 'Georgia', serif;
font-weight: normal;
margin: 30px 0px 10px 0px;
padding: 0;
}
div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; }
div.body h2 { font-size: 180%; }
div.body h3 { font-size: 150%; }
div.body h4 { font-size: 130%; }
div.body h5 { font-size: 100%; }
div.body h6 { font-size: 100%; }
a.headerlink {
color: #DDD;
padding: 0 4px;
text-decoration: none;
}
a.headerlink:hover {
color: #444;
background: #EAEAEA;
}
div.body p, div.body dd, div.body li {
line-height: 1.4em;
}
div.admonition {
margin: 20px 0px;
padding: 10px 30px;
background-color: #FCC;
border: 1px solid #FAA;
}
div.admonition tt.xref, div.admonition a tt {
border-bottom: 1px solid #fafafa;
}
dd div.admonition {
margin-left: -60px;
padding-left: 60px;
}
div.admonition p.admonition-title {
font-family: 'Garamond', 'Georgia', serif;
font-weight: normal;
font-size: 24px;
margin: 0 0 10px 0;
padding: 0;
line-height: 1;
}
div.admonition p.last {
margin-bottom: 0;
}
div.highlight {
background-color: white;
}
dt:target, .highlight {
background: #FAF3E8;
}
div.note {
background-color: #EEE;
border: 1px solid #CCC;
}
div.seealso {
background-color: #EEE;
border: 1px solid #CCC;
}
div.topic {
background-color: #eee;
}
p.admonition-title {
display: inline;
}
p.admonition-title:after {
content: ":";
}
pre, tt, code {
font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
font-size: 0.9em;
}
.hll {
background-color: #FFC;
margin: 0 -12px;
padding: 0 12px;
display: block;
}
img.screenshot {
}
tt.descname, tt.descclassname, code.descname, code.descclassname {
font-size: 0.95em;
}
tt.descname, code.descname {
padding-right: 0.08em;
}
img.screenshot {
-moz-box-shadow: 2px 2px 4px #eee;
-webkit-box-shadow: 2px 2px 4px #eee;
box-shadow: 2px 2px 4px #eee;
}
table.docutils {
border: 1px solid #888;
-moz-box-shadow: 2px 2px 4px #eee;
-webkit-box-shadow: 2px 2px 4px #eee;
box-shadow: 2px 2px 4px #eee;
}
table.docutils td, table.docutils th {
border: 1px solid #888;
padding: 0.25em 0.7em;
}
table.field-list, table.footnote {
border: none;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
table.footnote {
margin: 15px 0;
width: 100%;
border: 1px solid #EEE;
background: #FDFDFD;
font-size: 0.9em;
}
table.footnote + table.footnote {
margin-top: -15px;
border-top: none;
}
table.field-list th {
padding: 0 0.8em 0 0;
}
table.field-list td {
padding: 0;
}
table.field-list p {
margin-bottom: 0.8em;
}
table.footnote td.label {
width: .1px;
padding: 0.3em 0 0.3em 0.5em;
}
table.footnote td {
padding: 0.3em 0.5em;
}
dl {
margin: 0;
padding: 0;
}
dl dd {
margin-left: 30px;
}
blockquote {
margin: 0 0 0 30px;
padding: 0;
}
ul, ol {
/* Matches the 30px from the narrow-screen "li > ul" selector below */
margin: 10px 0 10px 30px;
padding: 0;
}
pre {
background: #EEE;
padding: 7px 30px;
margin: 15px 0px;
line-height: 1.3em;
}
dl pre, blockquote pre, li pre {
margin-left: 0;
padding-left: 30px;
}
dl dl pre {
margin-left: -90px;
padding-left: 90px;
}
tt, code {
background-color: #ecf0f3;
color: #222;
/* padding: 1px 2px; */
}
tt.xref, code.xref, a tt {
background-color: #FBFBFB;
border-bottom: 1px solid white;
}
a.reference {
text-decoration: none;
border-bottom: 1px dotted #004B6B;
}
/* Don't put an underline on images */
a.image-reference, a.image-reference:hover {
border-bottom: none;
}
a.reference:hover {
border-bottom: 1px solid #6D4100;
}
a.footnote-reference {
text-decoration: none;
font-size: 0.7em;
vertical-align: top;
border-bottom: 1px dotted #004B6B;
}
a.footnote-reference:hover {
border-bottom: 1px solid #6D4100;
}
a:hover tt, a:hover code {
background: #EEE;
}
@media screen and (max-width: 870px) {
div.sphinxsidebar {
display: none;
}
div.document {
width: 100%;
}
div.documentwrapper {
margin-left: 0;
margin-top: 0;
margin-right: 0;
margin-bottom: 0;
}
div.bodywrapper {
margin-top: 0;
margin-right: 0;
margin-bottom: 0;
margin-left: 0;
}
ul {
margin-left: 0;
}
li > ul {
/* Matches the 30px from the "ul, ol" selector above */
margin-left: 30px;
}
.document {
width: auto;
}
.footer {
width: auto;
}
.bodywrapper {
margin: 0;
}
.footer {
width: auto;
}
.github {
display: none;
}
}
@media screen and (max-width: 875px) {
body {
margin: 0;
padding: 20px 30px;
}
div.documentwrapper {
float: none;
background: white;
}
div.sphinxsidebar {
display: block;
float: none;
width: 102.5%;
margin: 50px -30px -20px -30px;
padding: 10px 20px;
background: #333;
color: #FFF;
}
div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,
div.sphinxsidebar h3 a {
color: white;
}
div.sphinxsidebar a {
color: #AAA;
}
div.sphinxsidebar p.logo {
display: none;
}
div.document {
width: 100%;
margin: 0;
}
div.footer {
display: none;
}
div.bodywrapper {
margin: 0;
}
div.body {
min-height: 0;
padding: 0;
}
.rtd_doc_footer {
display: none;
}
.document {
width: auto;
}
.footer {
width: auto;
}
.footer {
width: auto;
}
.github {
display: none;
}
}
/* misc. */
.revsys-inline {
display: none!important;
}
/* Make nested-list/multi-paragraph items look better in Releases changelog
* pages. Without this, docutils' magical list fuckery causes inconsistent
* formatting between different release sub-lists.
*/
div#changelog > div.section > ul > li > p:only-child {
margin-bottom: 0;
}
/* Hide fugly table cell borders in ..bibliography:: directive output */
table.docutils.citation, table.docutils.citation td, table.docutils.citation th {
border: none;
/* Below needed in some edge cases; if not applied, bottom shadows appear */
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}

View File

@ -1,611 +0,0 @@
/*
* basic.css
* ~~~~~~~~~
*
* Sphinx stylesheet -- basic theme.
*
* :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/* -- main layout ----------------------------------------------------------- */
div.clearer {
clear: both;
}
/* -- relbar ---------------------------------------------------------------- */
div.related {
width: 100%;
font-size: 90%;
}
div.related h3 {
display: none;
}
div.related ul {
margin: 0;
padding: 0 0 0 10px;
list-style: none;
}
div.related li {
display: inline;
}
div.related li.right {
float: right;
margin-right: 5px;
}
/* -- sidebar --------------------------------------------------------------- */
div.sphinxsidebarwrapper {
padding: 10px 5px 0 10px;
}
div.sphinxsidebar {
float: left;
width: 230px;
margin-left: -100%;
font-size: 90%;
word-wrap: break-word;
overflow-wrap : break-word;
}
div.sphinxsidebar ul {
list-style: none;
}
div.sphinxsidebar ul ul,
div.sphinxsidebar ul.want-points {
margin-left: 20px;
list-style: square;
}
div.sphinxsidebar ul ul {
margin-top: 0;
margin-bottom: 0;
}
div.sphinxsidebar form {
margin-top: 10px;
}
div.sphinxsidebar input {
border: 1px solid #98dbcc;
font-family: sans-serif;
font-size: 1em;
}
div.sphinxsidebar #searchbox input[type="text"] {
width: 170px;
}
img {
border: 0;
max-width: 100%;
}
/* -- search page ----------------------------------------------------------- */
ul.search {
margin: 10px 0 0 20px;
padding: 0;
}
ul.search li {
padding: 5px 0 5px 20px;
background-image: url(file.png);
background-repeat: no-repeat;
background-position: 0 7px;
}
ul.search li a {
font-weight: bold;
}
ul.search li div.context {
color: #888;
margin: 2px 0 0 30px;
text-align: left;
}
ul.keywordmatches li.goodmatch a {
font-weight: bold;
}
/* -- index page ------------------------------------------------------------ */
table.contentstable {
width: 90%;
}
table.contentstable p.biglink {
line-height: 150%;
}
a.biglink {
font-size: 1.3em;
}
span.linkdescr {
font-style: italic;
padding-top: 5px;
font-size: 90%;
}
/* -- general index --------------------------------------------------------- */
table.indextable {
width: 100%;
}
table.indextable td {
text-align: left;
vertical-align: top;
}
table.indextable dl, table.indextable dd {
margin-top: 0;
margin-bottom: 0;
}
table.indextable tr.pcap {
height: 10px;
}
table.indextable tr.cap {
margin-top: 10px;
background-color: #f2f2f2;
}
img.toggler {
margin-right: 3px;
margin-top: 3px;
cursor: pointer;
}
div.modindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
div.genindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
/* -- general body styles --------------------------------------------------- */
div.body p, div.body dd, div.body li, div.body blockquote {
-moz-hyphens: auto;
-ms-hyphens: auto;
-webkit-hyphens: auto;
hyphens: auto;
}
a.headerlink {
visibility: hidden;
}
h1:hover > a.headerlink,
h2:hover > a.headerlink,
h3:hover > a.headerlink,
h4:hover > a.headerlink,
h5:hover > a.headerlink,
h6:hover > a.headerlink,
dt:hover > a.headerlink,
caption:hover > a.headerlink,
p.caption:hover > a.headerlink,
div.code-block-caption:hover > a.headerlink {
visibility: visible;
}
div.body p.caption {
text-align: inherit;
}
div.body td {
text-align: left;
}
.field-list ul {
padding-left: 1em;
}
.first {
margin-top: 0 !important;
}
p.rubric {
margin-top: 30px;
font-weight: bold;
}
img.align-left, .figure.align-left, object.align-left {
clear: left;
float: left;
margin-right: 1em;
}
img.align-right, .figure.align-right, object.align-right {
clear: right;
float: right;
margin-left: 1em;
}
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left;
}
.align-center {
text-align: center;
}
.align-right {
text-align: right;
}
/* -- sidebars -------------------------------------------------------------- */
div.sidebar {
margin: 0 0 0.5em 1em;
border: 1px solid #ddb;
padding: 7px 7px 0 7px;
background-color: #ffe;
width: 40%;
float: right;
}
p.sidebar-title {
font-weight: bold;
}
/* -- topics ---------------------------------------------------------------- */
div.topic {
border: 1px solid #ccc;
padding: 7px 7px 0 7px;
margin: 10px 0 10px 0;
}
p.topic-title {
font-size: 1.1em;
font-weight: bold;
margin-top: 10px;
}
/* -- admonitions ----------------------------------------------------------- */
div.admonition {
margin-top: 10px;
margin-bottom: 10px;
padding: 7px;
}
div.admonition dt {
font-weight: bold;
}
div.admonition dl {
margin-bottom: 0;
}
p.admonition-title {
margin: 0px 10px 5px 0px;
font-weight: bold;
}
div.body p.centered {
text-align: center;
margin-top: 25px;
}
/* -- tables ---------------------------------------------------------------- */
table.docutils {
border: 0;
border-collapse: collapse;
}
table caption span.caption-number {
font-style: italic;
}
table caption span.caption-text {
}
table.docutils td, table.docutils th {
padding: 1px 8px 1px 5px;
border-top: 0;
border-left: 0;
border-right: 0;
border-bottom: 1px solid #aaa;
}
table.field-list td, table.field-list th {
border: 0 !important;
}
table.footnote td, table.footnote th {
border: 0 !important;
}
th {
text-align: left;
padding-right: 5px;
}
table.citation {
border-left: solid 1px gray;
margin-left: 1px;
}
table.citation td {
border-bottom: none;
}
/* -- figures --------------------------------------------------------------- */
div.figure {
margin: 0.5em;
padding: 0.5em;
}
div.figure p.caption {
padding: 0.3em;
}
div.figure p.caption span.caption-number {
font-style: italic;
}
div.figure p.caption span.caption-text {
}
/* -- other body styles ----------------------------------------------------- */
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;
}
dl {
margin-bottom: 15px;
}
dd p {
margin-top: 0px;
}
dd ul, dd table {
margin-bottom: 10px;
}
dd {
margin-top: 3px;
margin-bottom: 10px;
margin-left: 30px;
}
dt:target, .highlighted {
background-color: #fbe54e;
}
dl.glossary dt {
font-weight: bold;
font-size: 1.1em;
}
.field-list ul {
margin: 0;
padding-left: 1em;
}
.field-list p {
margin: 0;
}
.optional {
font-size: 1.3em;
}
.sig-paren {
font-size: larger;
}
.versionmodified {
font-style: italic;
}
.system-message {
background-color: #fda;
padding: 5px;
border: 3px solid red;
}
.footnote:target {
background-color: #ffa;
}
.line-block {
display: block;
margin-top: 1em;
margin-bottom: 1em;
}
.line-block .line-block {
margin-top: 0;
margin-bottom: 0;
margin-left: 1.5em;
}
.guilabel, .menuselection {
font-family: sans-serif;
}
.accelerator {
text-decoration: underline;
}
.classifier {
font-style: oblique;
}
abbr, acronym {
border-bottom: dotted 1px;
cursor: help;
}
/* -- code displays --------------------------------------------------------- */
pre {
overflow: auto;
overflow-y: hidden; /* fixes display issues on Chrome browsers */
}
span.pre {
-moz-hyphens: none;
-ms-hyphens: none;
-webkit-hyphens: none;
hyphens: none;
}
td.linenos pre {
padding: 5px 0px;
border: 0;
background-color: transparent;
color: #aaa;
}
table.highlighttable {
margin-left: 0.5em;
}
table.highlighttable td {
padding: 0 0.5em 0 0.5em;
}
div.code-block-caption {
padding: 2px 5px;
font-size: small;
}
div.code-block-caption code {
background-color: transparent;
}
div.code-block-caption + div > div.highlight > pre {
margin-top: 0;
}
div.code-block-caption span.caption-number {
padding: 0.1em 0.3em;
font-style: italic;
}
div.code-block-caption span.caption-text {
}
div.literal-block-wrapper {
padding: 1em 1em 0;
}
div.literal-block-wrapper div.highlight {
margin: 0;
}
code.descname {
background-color: transparent;
font-weight: bold;
font-size: 1.2em;
}
code.descclassname {
background-color: transparent;
}
code.xref, a code {
background-color: transparent;
font-weight: bold;
}
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
background-color: transparent;
}
.viewcode-link {
float: right;
}
.viewcode-back {
float: right;
font-family: sans-serif;
}
div.viewcode-block:target {
margin: -1px -10px;
padding: 0 10px;
}
/* -- math display ---------------------------------------------------------- */
img.math {
vertical-align: middle;
}
div.body div.math p {
text-align: center;
}
span.eqno {
float: right;
}
/* -- printout stylesheet --------------------------------------------------- */
@media print {
div.document,
div.documentwrapper,
div.bodywrapper {
margin: 0 !important;
width: 100%;
}
div.sphinxsidebar,
div.related,
div.footer,
#top-link {
display: none;
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -1 +0,0 @@
/* This file intentionally left blank. */

View File

@ -1,287 +0,0 @@
/*
* doctools.js
* ~~~~~~~~~~~
*
* Sphinx JavaScript utilities for all documentation.
*
* :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
/**
* make the code below compatible with browsers without
* an installed firebug like debugger
if (!window.console || !console.firebug) {
var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
"dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
"profile", "profileEnd"];
window.console = {};
for (var i = 0; i < names.length; ++i)
window.console[names[i]] = function() {};
}
*/
/**
* small helper function to urldecode strings
*/
jQuery.urldecode = function(x) {
return decodeURIComponent(x).replace(/\+/g, ' ');
};
/**
* small helper function to urlencode strings
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s == 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
*/
jQuery.fn.highlightText = function(text, className) {
function highlight(node) {
if (node.nodeType == 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) {
var span = document.createElement("span");
span.className = className;
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling));
node.nodeValue = val.substr(0, pos);
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this);
});
}
}
return this.each(function() {
highlight(this);
});
};
/*
* backward compatibility for jQuery.browser
* This will be supported until firefox bug is fixed.
*/
if (!jQuery.browser) {
jQuery.uaMatch = function(ua) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}
/**
* Small JavaScript module for the documentation.
*/
var Documentation = {
init : function() {
this.fixFirefoxAnchorBug();
this.highlightSearchWords();
this.initIndexTable();
},
/**
* i18n support
*/
TRANSLATIONS : {},
PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; },
LOCALE : 'unknown',
// gettext and ngettext don't access this so that the functions
// can safely bound to a different name (_ = Documentation.gettext)
gettext : function(string) {
var translated = Documentation.TRANSLATIONS[string];
if (typeof translated == 'undefined')
return string;
return (typeof translated == 'string') ? translated : translated[0];
},
ngettext : function(singular, plural, n) {
var translated = Documentation.TRANSLATIONS[singular];
if (typeof translated == 'undefined')
return (n == 1) ? singular : plural;
return translated[Documentation.PLURALEXPR(n)];
},
addTranslations : function(catalog) {
for (var key in catalog.messages)
this.TRANSLATIONS[key] = catalog.messages[key];
this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
this.LOCALE = catalog.locale;
},
/**
* add context elements like header anchor links
*/
addContextElements : function() {
$('div[id] > :header:first').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this headline')).
appendTo(this);
});
$('dt[id]').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this definition')).
appendTo(this);
});
},
/**
* workaround a firefox stupidity
* see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
*/
fixFirefoxAnchorBug : function() {
if (document.location.hash)
window.setTimeout(function() {
document.location.href += '';
}, 10);
},
/**
* highlight the search words provided in the url in the text
*/
highlightSearchWords : function() {
var params = $.getQueryParameters();
var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
if (terms.length) {
var body = $('div.body');
if (!body.length) {
body = $('body');
}
window.setTimeout(function() {
$.each(terms, function() {
body.highlightText(this.toLowerCase(), 'highlighted');
});
}, 10);
$('<p class="highlight-link"><a href="javascript:Documentation.' +
'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
.appendTo($('#searchbox'));
}
},
/**
* init the domain index toggle buttons
*/
initIndexTable : function() {
var togglers = $('img.toggler').click(function() {
var src = $(this).attr('src');
var idnum = $(this).attr('id').substr(7);
$('tr.cg-' + idnum).toggle();
if (src.substr(-9) == 'minus.png')
$(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
else
$(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
}).css('display', '');
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
togglers.click();
}
},
/**
* helper function to hide the search marks again
*/
hideSearchWords : function() {
$('#searchbox .highlight-link').fadeOut(300);
$('span.highlighted').removeClass('highlighted');
},
/**
* make the url absolute
*/
makeURL : function(relativeURL) {
return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
},
/**
* get the current relative url
*/
getCurrentURL : function() {
var path = document.location.pathname;
var parts = path.split(/\//);
$.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
if (this == '..')
parts.pop();
});
var url = parts.join('/');
return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
},
initOnKeyListeners: function() {
$(document).keyup(function(event) {
var activeElementType = document.activeElement.tagName;
// don't navigate when in search box or textarea
if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') {
switch (event.keyCode) {
case 37: // left
var prevHref = $('link[rel="prev"]').prop('href');
if (prevHref) {
window.location.href = prevHref;
return false;
}
case 39: // right
var nextHref = $('link[rel="next"]').prop('href');
if (nextHref) {
window.location.href = nextHref;
return false;
}
}
}
});
}
};
// quick alias for translations
_ = Documentation.gettext;
$(document).ready(function() {
Documentation.init();
});

Binary file not shown.

Before

Width:  |  Height:  |  Size: 347 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 347 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 358 B

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 173 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 173 B

View File

@ -1,69 +0,0 @@
.highlight .hll { background-color: #ffffcc }
.highlight { background: #eeffcc; }
.highlight .c { color: #408090; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #007020; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #007020 } /* Comment.Preproc */
.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */
.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #A00000 } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #FF0000 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #333333 } /* Generic.Output */
.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #0044DD } /* Generic.Traceback */
.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #007020 } /* Keyword.Pseudo */
.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #902000 } /* Keyword.Type */
.highlight .m { color: #208050 } /* Literal.Number */
.highlight .s { color: #4070a0 } /* Literal.String */
.highlight .na { color: #4070a0 } /* Name.Attribute */
.highlight .nb { color: #007020 } /* Name.Builtin */
.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
.highlight .no { color: #60add5 } /* Name.Constant */
.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */
.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */
.highlight .ne { color: #007020 } /* Name.Exception */
.highlight .nf { color: #06287e } /* Name.Function */
.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #bb60d5 } /* Name.Variable */
.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #208050 } /* Literal.Number.Bin */
.highlight .mf { color: #208050 } /* Literal.Number.Float */
.highlight .mh { color: #208050 } /* Literal.Number.Hex */
.highlight .mi { color: #208050 } /* Literal.Number.Integer */
.highlight .mo { color: #208050 } /* Literal.Number.Oct */
.highlight .sa { color: #4070a0 } /* Literal.String.Affix */
.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
.highlight .sc { color: #4070a0 } /* Literal.String.Char */
.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */
.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #4070a0 } /* Literal.String.Double */
.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */
.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
.highlight .sx { color: #c65d09 } /* Literal.String.Other */
.highlight .sr { color: #235388 } /* Literal.String.Regex */
.highlight .s1 { color: #4070a0 } /* Literal.String.Single */
.highlight .ss { color: #517918 } /* Literal.String.Symbol */
.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #06287e } /* Name.Function.Magic */
.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */
.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */

View File

@ -1,751 +0,0 @@
/*
* searchtools.js_t
* ~~~~~~~~~~~~~~~~
*
* Sphinx JavaScript utilities for the full-text search.
*
* :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/* Non-minified version JS is _stemmer.js if file is provided */
/**
* Porter Stemmer
*/
var Stemmer = function() {
var step2list = {
ational: 'ate',
tional: 'tion',
enci: 'ence',
anci: 'ance',
izer: 'ize',
bli: 'ble',
alli: 'al',
entli: 'ent',
eli: 'e',
ousli: 'ous',
ization: 'ize',
ation: 'ate',
ator: 'ate',
alism: 'al',
iveness: 'ive',
fulness: 'ful',
ousness: 'ous',
aliti: 'al',
iviti: 'ive',
biliti: 'ble',
logi: 'log'
};
var step3list = {
icate: 'ic',
ative: '',
alize: 'al',
iciti: 'ic',
ical: 'ic',
ful: '',
ness: ''
};
var c = "[^aeiou]"; // consonant
var v = "[aeiouy]"; // vowel
var C = c + "[^aeiouy]*"; // consonant sequence
var V = v + "[aeiou]*"; // vowel sequence
var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
var s_v = "^(" + C + ")?" + v; // vowel in stem
this.stemWord = function (w) {
var stem;
var suffix;
var firstch;
var origword = w;
if (w.length < 3)
return w;
var re;
var re2;
var re3;
var re4;
firstch = w.substr(0,1);
if (firstch == "y")
w = firstch.toUpperCase() + w.substr(1);
// Step 1a
re = /^(.+?)(ss|i)es$/;
re2 = /^(.+?)([^s])s$/;
if (re.test(w))
w = w.replace(re,"$1$2");
else if (re2.test(w))
w = w.replace(re2,"$1$2");
// Step 1b
re = /^(.+?)eed$/;
re2 = /^(.+?)(ed|ing)$/;
if (re.test(w)) {
var fp = re.exec(w);
re = new RegExp(mgr0);
if (re.test(fp[1])) {
re = /.$/;
w = w.replace(re,"");
}
}
else if (re2.test(w)) {
var fp = re2.exec(w);
stem = fp[1];
re2 = new RegExp(s_v);
if (re2.test(stem)) {
w = stem;
re2 = /(at|bl|iz)$/;
re3 = new RegExp("([^aeiouylsz])\\1$");
re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
if (re2.test(w))
w = w + "e";
else if (re3.test(w)) {
re = /.$/;
w = w.replace(re,"");
}
else if (re4.test(w))
w = w + "e";
}
}
// Step 1c
re = /^(.+?)y$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(s_v);
if (re.test(stem))
w = stem + "i";
}
// Step 2
re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
suffix = fp[2];
re = new RegExp(mgr0);
if (re.test(stem))
w = stem + step2list[suffix];
}
// Step 3
re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
suffix = fp[2];
re = new RegExp(mgr0);
if (re.test(stem))
w = stem + step3list[suffix];
}
// Step 4
re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
re2 = /^(.+?)(s|t)(ion)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(mgr1);
if (re.test(stem))
w = stem;
}
else if (re2.test(w)) {
var fp = re2.exec(w);
stem = fp[1] + fp[2];
re2 = new RegExp(mgr1);
if (re2.test(stem))
w = stem;
}
// Step 5
re = /^(.+?)e$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(mgr1);
re2 = new RegExp(meq1);
re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
w = stem;
}
re = /ll$/;
re2 = new RegExp(mgr1);
if (re.test(w) && re2.test(w)) {
re = /.$/;
w = w.replace(re,"");
}
// and turn initial Y back to y
if (firstch == "y")
w = firstch.toLowerCase() + w.substr(1);
return w;
}
}
/**
* Simple result scoring code.
*/
var Scorer = {
// Implement the following function to further tweak the score for each result
// The function takes a result array [filename, title, anchor, descr, score]
// and returns the new score.
/*
score: function(result) {
return result[4];
},
*/
// query matches the full name of an object
objNameMatch: 11,
// or matches in the last dotted part of the object name
objPartialMatch: 6,
// Additive scores depending on the priority of the object
objPrio: {0: 15, // used to be importantResults
1: 5, // used to be objectResults
2: -5}, // used to be unimportantResults
// Used when the priority is not in the mapping.
objPrioDefault: 0,
// query found in title
title: 15,
// query found in terms
term: 5
};
var splitChars = (function() {
var result = {};
var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
var i, j, start, end;
for (i = 0; i < singles.length; i++) {
result[singles[i]] = true;
}
var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
[722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
[1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
[1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
[1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
[2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
[2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
[2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
[2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
[2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
[2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
[2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
[3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
[3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
[3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
[3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
[3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
[3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
[4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
[4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
[4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
[4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
[5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
[6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
[6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
[6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
[6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
[7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
[7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
[8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
[8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
[8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
[10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
[11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
[12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
[12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
[12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
[19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
[42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
[42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
[43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
[43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
[43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
[43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
[44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
[57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
[64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
[65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
[65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
for (i = 0; i < ranges.length; i++) {
start = ranges[i][0];
end = ranges[i][1];
for (j = start; j <= end; j++) {
result[j] = true;
}
}
return result;
})();
function splitQuery(query) {
var result = [];
var start = -1;
for (var i = 0; i < query.length; i++) {
if (splitChars[query.charCodeAt(i)]) {
if (start !== -1) {
result.push(query.slice(start, i));
start = -1;
}
} else if (start === -1) {
start = i;
}
}
if (start !== -1) {
result.push(query.slice(start));
}
return result;
}
/**
* Search Module
*/
var Search = {
_index : null,
_queued_query : null,
_pulse_status : -1,
init : function() {
var params = $.getQueryParameters();
if (params.q) {
var query = params.q[0];
$('input[name="q"]')[0].value = query;
this.performSearch(query);
}
},
loadIndex : function(url) {
$.ajax({type: "GET", url: url, data: null,
dataType: "script", cache: true,
complete: function(jqxhr, textstatus) {
if (textstatus != "success") {
document.getElementById("searchindexloader").src = url;
}
}});
},
setIndex : function(index) {
var q;
this._index = index;
if ((q = this._queued_query) !== null) {
this._queued_query = null;
Search.query(q);
}
},
hasIndex : function() {
return this._index !== null;
},
deferQuery : function(query) {
this._queued_query = query;
},
stopPulse : function() {
this._pulse_status = 0;
},
startPulse : function() {
if (this._pulse_status >= 0)
return;
function pulse() {
var i;
Search._pulse_status = (Search._pulse_status + 1) % 4;
var dotString = '';
for (i = 0; i < Search._pulse_status; i++)
dotString += '.';
Search.dots.text(dotString);
if (Search._pulse_status > -1)
window.setTimeout(pulse, 500);
}
pulse();
},
/**
* perform a search for something (or wait until index is loaded)
*/
performSearch : function(query) {
// create the required interface elements
this.out = $('#search-results');
this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
this.dots = $('<span></span>').appendTo(this.title);
this.status = $('<p style="display: none"></p>').appendTo(this.out);
this.output = $('<ul class="search"/>').appendTo(this.out);
$('#search-progress').text(_('Preparing search...'));
this.startPulse();
// index already loaded, the browser was quick!
if (this.hasIndex())
this.query(query);
else
this.deferQuery(query);
},
/**
* execute search (requires search index to be loaded)
*/
query : function(query) {
var i;
var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
// stem the searchterms and add them to the correct list
var stemmer = new Stemmer();
var searchterms = [];
var excluded = [];
var hlterms = [];
var tmp = splitQuery(query);
var objectterms = [];
for (i = 0; i < tmp.length; i++) {
if (tmp[i] !== "") {
objectterms.push(tmp[i].toLowerCase());
}
if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i].match(/^\d+$/) ||
tmp[i] === "") {
// skip this "word"
continue;
}
// stem the word
var word = stemmer.stemWord(tmp[i].toLowerCase());
var toAppend;
// select the correct list
if (word[0] == '-') {
toAppend = excluded;
word = word.substr(1);
}
else {
toAppend = searchterms;
hlterms.push(tmp[i].toLowerCase());
}
// only add if not already in the list
if (!$u.contains(toAppend, word))
toAppend.push(word);
}
var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
// console.debug('SEARCH: searching for:');
// console.info('required: ', searchterms);
// console.info('excluded: ', excluded);
// prepare search
var terms = this._index.terms;
var titleterms = this._index.titleterms;
// array of [filename, title, anchor, descr, score]
var results = [];
$('#search-progress').empty();
// lookup as object
for (i = 0; i < objectterms.length; i++) {
var others = [].concat(objectterms.slice(0, i),
objectterms.slice(i+1, objectterms.length));
results = results.concat(this.performObjectSearch(objectterms[i], others));
}
// lookup as search terms in fulltext
results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
// let the scorer override scores with a custom scoring function
if (Scorer.score) {
for (i = 0; i < results.length; i++)
results[i][4] = Scorer.score(results[i]);
}
// now sort the results by score (in opposite order of appearance, since the
// display function below uses pop() to retrieve items) and then
// alphabetically
results.sort(function(a, b) {
var left = a[4];
var right = b[4];
if (left > right) {
return 1;
} else if (left < right) {
return -1;
} else {
// same score: sort alphabetically
left = a[1].toLowerCase();
right = b[1].toLowerCase();
return (left > right) ? -1 : ((left < right) ? 1 : 0);
}
});
// for debugging
//Search.lastresults = results.slice(); // a copy
//console.info('search results:', Search.lastresults);
// print the results
var resultCount = results.length;
function displayNextItem() {
// results left, load the summary and display it
if (results.length) {
var item = results.pop();
var listItem = $('<li style="display:none"></li>');
if (DOCUMENTATION_OPTIONS.FILE_SUFFIX === '') {
// dirhtml builder
var dirname = item[0] + '/';
if (dirname.match(/\/index\/$/)) {
dirname = dirname.substring(0, dirname.length-6);
} else if (dirname == 'index/') {
dirname = '';
}
listItem.append($('<a/>').attr('href',
DOCUMENTATION_OPTIONS.URL_ROOT + dirname +
highlightstring + item[2]).html(item[1]));
} else {
// normal html builders
listItem.append($('<a/>').attr('href',
item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX +
highlightstring + item[2]).html(item[1]));
}
if (item[3]) {
listItem.append($('<span> (' + item[3] + ')</span>'));
Search.output.append(listItem);
listItem.slideDown(5, function() {
displayNextItem();
});
} else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
$.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[0] + '.txt',
dataType: "text",
complete: function(jqxhr, textstatus) {
var data = jqxhr.responseText;
if (data !== '' && data !== undefined) {
listItem.append(Search.makeSearchSummary(data, searchterms, hlterms));
}
Search.output.append(listItem);
listItem.slideDown(5, function() {
displayNextItem();
});
}});
} else {
// no source available, just display title
Search.output.append(listItem);
listItem.slideDown(5, function() {
displayNextItem();
});
}
}
// search finished, update title and status message
else {
Search.stopPulse();
Search.title.text(_('Search Results'));
if (!resultCount)
Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
else
Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
Search.status.fadeIn(500);
}
}
displayNextItem();
},
/**
* search for object names
*/
performObjectSearch : function(object, otherterms) {
var filenames = this._index.filenames;
var objects = this._index.objects;
var objnames = this._index.objnames;
var titles = this._index.titles;
var i;
var results = [];
for (var prefix in objects) {
for (var name in objects[prefix]) {
var fullname = (prefix ? prefix + '.' : '') + name;
if (fullname.toLowerCase().indexOf(object) > -1) {
var score = 0;
var parts = fullname.split('.');
// check for different match types: exact matches of full name or
// "last name" (i.e. last dotted part)
if (fullname == object || parts[parts.length - 1] == object) {
score += Scorer.objNameMatch;
// matches in last name
} else if (parts[parts.length - 1].indexOf(object) > -1) {
score += Scorer.objPartialMatch;
}
var match = objects[prefix][name];
var objname = objnames[match[1]][2];
var title = titles[match[0]];
// If more than one term searched for, we require other words to be
// found in the name/title/description
if (otherterms.length > 0) {
var haystack = (prefix + ' ' + name + ' ' +
objname + ' ' + title).toLowerCase();
var allfound = true;
for (i = 0; i < otherterms.length; i++) {
if (haystack.indexOf(otherterms[i]) == -1) {
allfound = false;
break;
}
}
if (!allfound) {
continue;
}
}
var descr = objname + _(', in ') + title;
var anchor = match[3];
if (anchor === '')
anchor = fullname;
else if (anchor == '-')
anchor = objnames[match[1]][1] + '-' + fullname;
// add custom score for some objects according to scorer
if (Scorer.objPrio.hasOwnProperty(match[2])) {
score += Scorer.objPrio[match[2]];
} else {
score += Scorer.objPrioDefault;
}
results.push([filenames[match[0]], fullname, '#'+anchor, descr, score]);
}
}
}
return results;
},
/**
* search for full-text terms in the index
*/
performTermsSearch : function(searchterms, excluded, terms, titleterms) {
var filenames = this._index.filenames;
var titles = this._index.titles;
var i, j, file;
var fileMap = {};
var scoreMap = {};
var results = [];
// perform the search on the required terms
for (i = 0; i < searchterms.length; i++) {
var word = searchterms[i];
var files = [];
var _o = [
{files: terms[word], score: Scorer.term},
{files: titleterms[word], score: Scorer.title}
];
// no match but word was a required one
if ($u.every(_o, function(o){return o.files === undefined;})) {
break;
}
// found search word in contents
$u.each(_o, function(o) {
var _files = o.files;
if (_files === undefined)
return
if (_files.length === undefined)
_files = [_files];
files = files.concat(_files);
// set score for the word in each file to Scorer.term
for (j = 0; j < _files.length; j++) {
file = _files[j];
if (!(file in scoreMap))
scoreMap[file] = {}
scoreMap[file][word] = o.score;
}
});
// create the mapping
for (j = 0; j < files.length; j++) {
file = files[j];
if (file in fileMap)
fileMap[file].push(word);
else
fileMap[file] = [word];
}
}
// now check if the files don't contain excluded terms
for (file in fileMap) {
var valid = true;
// check if all requirements are matched
if (fileMap[file].length != searchterms.length)
continue;
// ensure that none of the excluded terms is in the search result
for (i = 0; i < excluded.length; i++) {
if (terms[excluded[i]] == file ||
titleterms[excluded[i]] == file ||
$u.contains(terms[excluded[i]] || [], file) ||
$u.contains(titleterms[excluded[i]] || [], file)) {
valid = false;
break;
}
}
// if we have still a valid result we can add it to the result list
if (valid) {
// select one (max) score for the file.
// for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
results.push([filenames[file], titles[file], '', null, score]);
}
}
return results;
},
/**
* helper function to return a node containing the
* search summary for a given text. keywords is a list
* of stemmed words, hlwords is the list of normal, unstemmed
* words. the first one is used to find the occurrence, the
* latter for highlighting it.
*/
makeSearchSummary : function(text, keywords, hlwords) {
var textLower = text.toLowerCase();
var start = 0;
$.each(keywords, function() {
var i = textLower.indexOf(this.toLowerCase());
if (i > -1)
start = i;
});
start = Math.max(start - 120, 0);
var excerpt = ((start > 0) ? '...' : '') +
$.trim(text.substr(start, 240)) +
((start + 240 - text.length) ? '...' : '');
var rv = $('<div class="context"></div>').text(excerpt);
$.each(hlwords, function() {
rv = rv.highlightText(this, 'highlighted');
});
return rv;
}
};
$(document).ready(function() {
Search.init();
});

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 345 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 345 B

View File

@ -1,808 +0,0 @@
/*
* websupport.js
* ~~~~~~~~~~~~~
*
* sphinx.websupport utilities for all documentation.
*
* :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
(function($) {
$.fn.autogrow = function() {
return this.each(function() {
var textarea = this;
$.fn.autogrow.resize(textarea);
$(textarea)
.focus(function() {
textarea.interval = setInterval(function() {
$.fn.autogrow.resize(textarea);
}, 500);
})
.blur(function() {
clearInterval(textarea.interval);
});
});
};
$.fn.autogrow.resize = function(textarea) {
var lineHeight = parseInt($(textarea).css('line-height'), 10);
var lines = textarea.value.split('\n');
var columns = textarea.cols;
var lineCount = 0;
$.each(lines, function() {
lineCount += Math.ceil(this.length / columns) || 1;
});
var height = lineHeight * (lineCount + 1);
$(textarea).css('height', height);
};
})(jQuery);
(function($) {
var comp, by;
function init() {
initEvents();
initComparator();
}
function initEvents() {
$(document).on("click", 'a.comment-close', function(event) {
event.preventDefault();
hide($(this).attr('id').substring(2));
});
$(document).on("click", 'a.vote', function(event) {
event.preventDefault();
handleVote($(this));
});
$(document).on("click", 'a.reply', function(event) {
event.preventDefault();
openReply($(this).attr('id').substring(2));
});
$(document).on("click", 'a.close-reply', function(event) {
event.preventDefault();
closeReply($(this).attr('id').substring(2));
});
$(document).on("click", 'a.sort-option', function(event) {
event.preventDefault();
handleReSort($(this));
});
$(document).on("click", 'a.show-proposal', function(event) {
event.preventDefault();
showProposal($(this).attr('id').substring(2));
});
$(document).on("click", 'a.hide-proposal', function(event) {
event.preventDefault();
hideProposal($(this).attr('id').substring(2));
});
$(document).on("click", 'a.show-propose-change', function(event) {
event.preventDefault();
showProposeChange($(this).attr('id').substring(2));
});
$(document).on("click", 'a.hide-propose-change', function(event) {
event.preventDefault();
hideProposeChange($(this).attr('id').substring(2));
});
$(document).on("click", 'a.accept-comment', function(event) {
event.preventDefault();
acceptComment($(this).attr('id').substring(2));
});
$(document).on("click", 'a.delete-comment', function(event) {
event.preventDefault();
deleteComment($(this).attr('id').substring(2));
});
$(document).on("click", 'a.comment-markup', function(event) {
event.preventDefault();
toggleCommentMarkupBox($(this).attr('id').substring(2));
});
}
/**
* Set comp, which is a comparator function used for sorting and
* inserting comments into the list.
*/
function setComparator() {
// If the first three letters are "asc", sort in ascending order
// and remove the prefix.
if (by.substring(0,3) == 'asc') {
var i = by.substring(3);
comp = function(a, b) { return a[i] - b[i]; };
} else {
// Otherwise sort in descending order.
comp = function(a, b) { return b[by] - a[by]; };
}
// Reset link styles and format the selected sort option.
$('a.sel').attr('href', '#').removeClass('sel');
$('a.by' + by).removeAttr('href').addClass('sel');
}
/**
* Create a comp function. If the user has preferences stored in
* the sortBy cookie, use those, otherwise use the default.
*/
function initComparator() {
by = 'rating'; // Default to sort by rating.
// If the sortBy cookie is set, use that instead.
if (document.cookie.length > 0) {
var start = document.cookie.indexOf('sortBy=');
if (start != -1) {
start = start + 7;
var end = document.cookie.indexOf(";", start);
if (end == -1) {
end = document.cookie.length;
by = unescape(document.cookie.substring(start, end));
}
}
}
setComparator();
}
/**
* Show a comment div.
*/
function show(id) {
$('#ao' + id).hide();
$('#ah' + id).show();
var context = $.extend({id: id}, opts);
var popup = $(renderTemplate(popupTemplate, context)).hide();
popup.find('textarea[name="proposal"]').hide();
popup.find('a.by' + by).addClass('sel');
var form = popup.find('#cf' + id);
form.submit(function(event) {
event.preventDefault();
addComment(form);
});
$('#s' + id).after(popup);
popup.slideDown('fast', function() {
getComments(id);
});
}
/**
* Hide a comment div.
*/
function hide(id) {
$('#ah' + id).hide();
$('#ao' + id).show();
var div = $('#sc' + id);
div.slideUp('fast', function() {
div.remove();
});
}
/**
* Perform an ajax request to get comments for a node
* and insert the comments into the comments tree.
*/
function getComments(id) {
$.ajax({
type: 'GET',
url: opts.getCommentsURL,
data: {node: id},
success: function(data, textStatus, request) {
var ul = $('#cl' + id);
var speed = 100;
$('#cf' + id)
.find('textarea[name="proposal"]')
.data('source', data.source);
if (data.comments.length === 0) {
ul.html('<li>No comments yet.</li>');
ul.data('empty', true);
} else {
// If there are comments, sort them and put them in the list.
var comments = sortComments(data.comments);
speed = data.comments.length * 100;
appendComments(comments, ul);
ul.data('empty', false);
}
$('#cn' + id).slideUp(speed + 200);
ul.slideDown(speed);
},
error: function(request, textStatus, error) {
showError('Oops, there was a problem retrieving the comments.');
},
dataType: 'json'
});
}
/**
* Add a comment via ajax and insert the comment into the comment tree.
*/
function addComment(form) {
var node_id = form.find('input[name="node"]').val();
var parent_id = form.find('input[name="parent"]').val();
var text = form.find('textarea[name="comment"]').val();
var proposal = form.find('textarea[name="proposal"]').val();
if (text == '') {
showError('Please enter a comment.');
return;
}
// Disable the form that is being submitted.
form.find('textarea,input').attr('disabled', 'disabled');
// Send the comment to the server.
$.ajax({
type: "POST",
url: opts.addCommentURL,
dataType: 'json',
data: {
node: node_id,
parent: parent_id,
text: text,
proposal: proposal
},
success: function(data, textStatus, error) {
// Reset the form.
if (node_id) {
hideProposeChange(node_id);
}
form.find('textarea')
.val('')
.add(form.find('input'))
.removeAttr('disabled');
var ul = $('#cl' + (node_id || parent_id));
if (ul.data('empty')) {
$(ul).empty();
ul.data('empty', false);
}
insertComment(data.comment);
var ao = $('#ao' + node_id);
ao.find('img').attr({'src': opts.commentBrightImage});
if (node_id) {
// if this was a "root" comment, remove the commenting box
// (the user can get it back by reopening the comment popup)
$('#ca' + node_id).slideUp();
}
},
error: function(request, textStatus, error) {
form.find('textarea,input').removeAttr('disabled');
showError('Oops, there was a problem adding the comment.');
}
});
}
/**
* Recursively append comments to the main comment list and children
* lists, creating the comment tree.
*/
function appendComments(comments, ul) {
$.each(comments, function() {
var div = createCommentDiv(this);
ul.append($(document.createElement('li')).html(div));
appendComments(this.children, div.find('ul.comment-children'));
// To avoid stagnating data, don't store the comments children in data.
this.children = null;
div.data('comment', this);
});
}
/**
* After adding a new comment, it must be inserted in the correct
* location in the comment tree.
*/
function insertComment(comment) {
var div = createCommentDiv(comment);
// To avoid stagnating data, don't store the comments children in data.
comment.children = null;
div.data('comment', comment);
var ul = $('#cl' + (comment.node || comment.parent));
var siblings = getChildren(ul);
var li = $(document.createElement('li'));
li.hide();
// Determine where in the parents children list to insert this comment.
for(i=0; i < siblings.length; i++) {
if (comp(comment, siblings[i]) <= 0) {
$('#cd' + siblings[i].id)
.parent()
.before(li.html(div));
li.slideDown('fast');
return;
}
}
// If we get here, this comment rates lower than all the others,
// or it is the only comment in the list.
ul.append(li.html(div));
li.slideDown('fast');
}
function acceptComment(id) {
$.ajax({
type: 'POST',
url: opts.acceptCommentURL,
data: {id: id},
success: function(data, textStatus, request) {
$('#cm' + id).fadeOut('fast');
$('#cd' + id).removeClass('moderate');
},
error: function(request, textStatus, error) {
showError('Oops, there was a problem accepting the comment.');
}
});
}
function deleteComment(id) {
$.ajax({
type: 'POST',
url: opts.deleteCommentURL,
data: {id: id},
success: function(data, textStatus, request) {
var div = $('#cd' + id);
if (data == 'delete') {
// Moderator mode: remove the comment and all children immediately
div.slideUp('fast', function() {
div.remove();
});
return;
}
// User mode: only mark the comment as deleted
div
.find('span.user-id:first')
.text('[deleted]').end()
.find('div.comment-text:first')
.text('[deleted]').end()
.find('#cm' + id + ', #dc' + id + ', #ac' + id + ', #rc' + id +
', #sp' + id + ', #hp' + id + ', #cr' + id + ', #rl' + id)
.remove();
var comment = div.data('comment');
comment.username = '[deleted]';
comment.text = '[deleted]';
div.data('comment', comment);
},
error: function(request, textStatus, error) {
showError('Oops, there was a problem deleting the comment.');
}
});
}
function showProposal(id) {
$('#sp' + id).hide();
$('#hp' + id).show();
$('#pr' + id).slideDown('fast');
}
function hideProposal(id) {
$('#hp' + id).hide();
$('#sp' + id).show();
$('#pr' + id).slideUp('fast');
}
function showProposeChange(id) {
$('#pc' + id).hide();
$('#hc' + id).show();
var textarea = $('#pt' + id);
textarea.val(textarea.data('source'));
$.fn.autogrow.resize(textarea[0]);
textarea.slideDown('fast');
}
function hideProposeChange(id) {
$('#hc' + id).hide();
$('#pc' + id).show();
var textarea = $('#pt' + id);
textarea.val('').removeAttr('disabled');
textarea.slideUp('fast');
}
function toggleCommentMarkupBox(id) {
$('#mb' + id).toggle();
}
/** Handle when the user clicks on a sort by link. */
function handleReSort(link) {
var classes = link.attr('class').split(/\s+/);
for (var i=0; i<classes.length; i++) {
if (classes[i] != 'sort-option') {
by = classes[i].substring(2);
}
}
setComparator();
// Save/update the sortBy cookie.
var expiration = new Date();
expiration.setDate(expiration.getDate() + 365);
document.cookie= 'sortBy=' + escape(by) +
';expires=' + expiration.toUTCString();
$('ul.comment-ul').each(function(index, ul) {
var comments = getChildren($(ul), true);
comments = sortComments(comments);
appendComments(comments, $(ul).empty());
});
}
/**
* Function to process a vote when a user clicks an arrow.
*/
function handleVote(link) {
if (!opts.voting) {
showError("You'll need to login to vote.");
return;
}
var id = link.attr('id');
if (!id) {
// Didn't click on one of the voting arrows.
return;
}
// If it is an unvote, the new vote value is 0,
// Otherwise it's 1 for an upvote, or -1 for a downvote.
var value = 0;
if (id.charAt(1) != 'u') {
value = id.charAt(0) == 'u' ? 1 : -1;
}
// The data to be sent to the server.
var d = {
comment_id: id.substring(2),
value: value
};
// Swap the vote and unvote links.
link.hide();
$('#' + id.charAt(0) + (id.charAt(1) == 'u' ? 'v' : 'u') + d.comment_id)
.show();
// The div the comment is displayed in.
var div = $('div#cd' + d.comment_id);
var data = div.data('comment');
// If this is not an unvote, and the other vote arrow has
// already been pressed, unpress it.
if ((d.value !== 0) && (data.vote === d.value * -1)) {
$('#' + (d.value == 1 ? 'd' : 'u') + 'u' + d.comment_id).hide();
$('#' + (d.value == 1 ? 'd' : 'u') + 'v' + d.comment_id).show();
}
// Update the comments rating in the local data.
data.rating += (data.vote === 0) ? d.value : (d.value - data.vote);
data.vote = d.value;
div.data('comment', data);
// Change the rating text.
div.find('.rating:first')
.text(data.rating + ' point' + (data.rating == 1 ? '' : 's'));
// Send the vote information to the server.
$.ajax({
type: "POST",
url: opts.processVoteURL,
data: d,
error: function(request, textStatus, error) {
showError('Oops, there was a problem casting that vote.');
}
});
}
/**
* Open a reply form used to reply to an existing comment.
*/
function openReply(id) {
// Swap out the reply link for the hide link
$('#rl' + id).hide();
$('#cr' + id).show();
// Add the reply li to the children ul.
var div = $(renderTemplate(replyTemplate, {id: id})).hide();
$('#cl' + id)
.prepend(div)
// Setup the submit handler for the reply form.
.find('#rf' + id)
.submit(function(event) {
event.preventDefault();
addComment($('#rf' + id));
closeReply(id);
})
.find('input[type=button]')
.click(function() {
closeReply(id);
});
div.slideDown('fast', function() {
$('#rf' + id).find('textarea').focus();
});
}
/**
* Close the reply form opened with openReply.
*/
function closeReply(id) {
// Remove the reply div from the DOM.
$('#rd' + id).slideUp('fast', function() {
$(this).remove();
});
// Swap out the hide link for the reply link
$('#cr' + id).hide();
$('#rl' + id).show();
}
/**
* Recursively sort a tree of comments using the comp comparator.
*/
function sortComments(comments) {
comments.sort(comp);
$.each(comments, function() {
this.children = sortComments(this.children);
});
return comments;
}
/**
* Get the children comments from a ul. If recursive is true,
* recursively include childrens' children.
*/
function getChildren(ul, recursive) {
var children = [];
ul.children().children("[id^='cd']")
.each(function() {
var comment = $(this).data('comment');
if (recursive)
comment.children = getChildren($(this).find('#cl' + comment.id), true);
children.push(comment);
});
return children;
}
/** Create a div to display a comment in. */
function createCommentDiv(comment) {
if (!comment.displayed && !opts.moderator) {
return $('<div class="moderate">Thank you! Your comment will show up '
+ 'once it is has been approved by a moderator.</div>');
}
// Prettify the comment rating.
comment.pretty_rating = comment.rating + ' point' +
(comment.rating == 1 ? '' : 's');
// Make a class (for displaying not yet moderated comments differently)
comment.css_class = comment.displayed ? '' : ' moderate';
// Create a div for this comment.
var context = $.extend({}, opts, comment);
var div = $(renderTemplate(commentTemplate, context));
// If the user has voted on this comment, highlight the correct arrow.
if (comment.vote) {
var direction = (comment.vote == 1) ? 'u' : 'd';
div.find('#' + direction + 'v' + comment.id).hide();
div.find('#' + direction + 'u' + comment.id).show();
}
if (opts.moderator || comment.text != '[deleted]') {
div.find('a.reply').show();
if (comment.proposal_diff)
div.find('#sp' + comment.id).show();
if (opts.moderator && !comment.displayed)
div.find('#cm' + comment.id).show();
if (opts.moderator || (opts.username == comment.username))
div.find('#dc' + comment.id).show();
}
return div;
}
/**
* A simple template renderer. Placeholders such as <%id%> are replaced
* by context['id'] with items being escaped. Placeholders such as <#id#>
* are not escaped.
*/
function renderTemplate(template, context) {
var esc = $(document.createElement('div'));
function handle(ph, escape) {
var cur = context;
$.each(ph.split('.'), function() {
cur = cur[this];
});
return escape ? esc.text(cur || "").html() : cur;
}
return template.replace(/<([%#])([\w\.]*)\1>/g, function() {
return handle(arguments[2], arguments[1] == '%' ? true : false);
});
}
/** Flash an error message briefly. */
function showError(message) {
$(document.createElement('div')).attr({'class': 'popup-error'})
.append($(document.createElement('div'))
.attr({'class': 'error-message'}).text(message))
.appendTo('body')
.fadeIn("slow")
.delay(2000)
.fadeOut("slow");
}
/** Add a link the user uses to open the comments popup. */
$.fn.comment = function() {
return this.each(function() {
var id = $(this).attr('id').substring(1);
var count = COMMENT_METADATA[id];
var title = count + ' comment' + (count == 1 ? '' : 's');
var image = count > 0 ? opts.commentBrightImage : opts.commentImage;
var addcls = count == 0 ? ' nocomment' : '';
$(this)
.append(
$(document.createElement('a')).attr({
href: '#',
'class': 'sphinx-comment-open' + addcls,
id: 'ao' + id
})
.append($(document.createElement('img')).attr({
src: image,
alt: 'comment',
title: title
}))
.click(function(event) {
event.preventDefault();
show($(this).attr('id').substring(2));
})
)
.append(
$(document.createElement('a')).attr({
href: '#',
'class': 'sphinx-comment-close hidden',
id: 'ah' + id
})
.append($(document.createElement('img')).attr({
src: opts.closeCommentImage,
alt: 'close',
title: 'close'
}))
.click(function(event) {
event.preventDefault();
hide($(this).attr('id').substring(2));
})
);
});
};
var opts = {
processVoteURL: '/_process_vote',
addCommentURL: '/_add_comment',
getCommentsURL: '/_get_comments',
acceptCommentURL: '/_accept_comment',
deleteCommentURL: '/_delete_comment',
commentImage: '/static/_static/comment.png',
closeCommentImage: '/static/_static/comment-close.png',
loadingImage: '/static/_static/ajax-loader.gif',
commentBrightImage: '/static/_static/comment-bright.png',
upArrow: '/static/_static/up.png',
downArrow: '/static/_static/down.png',
upArrowPressed: '/static/_static/up-pressed.png',
downArrowPressed: '/static/_static/down-pressed.png',
voting: false,
moderator: false
};
if (typeof COMMENT_OPTIONS != "undefined") {
opts = jQuery.extend(opts, COMMENT_OPTIONS);
}
var popupTemplate = '\
<div class="sphinx-comments" id="sc<%id%>">\
<p class="sort-options">\
Sort by:\
<a href="#" class="sort-option byrating">best rated</a>\
<a href="#" class="sort-option byascage">newest</a>\
<a href="#" class="sort-option byage">oldest</a>\
</p>\
<div class="comment-header">Comments</div>\
<div class="comment-loading" id="cn<%id%>">\
loading comments... <img src="<%loadingImage%>" alt="" /></div>\
<ul id="cl<%id%>" class="comment-ul"></ul>\
<div id="ca<%id%>">\
<p class="add-a-comment">Add a comment\
(<a href="#" class="comment-markup" id="ab<%id%>">markup</a>):</p>\
<div class="comment-markup-box" id="mb<%id%>">\
reStructured text markup: <i>*emph*</i>, <b>**strong**</b>, \
<code>``code``</code>, \
code blocks: <code>::</code> and an indented block after blank line</div>\
<form method="post" id="cf<%id%>" class="comment-form" action="">\
<textarea name="comment" cols="80"></textarea>\
<p class="propose-button">\
<a href="#" id="pc<%id%>" class="show-propose-change">\
Propose a change &#9657;\
</a>\
<a href="#" id="hc<%id%>" class="hide-propose-change">\
Propose a change &#9663;\
</a>\
</p>\
<textarea name="proposal" id="pt<%id%>" cols="80"\
spellcheck="false"></textarea>\
<input type="submit" value="Add comment" />\
<input type="hidden" name="node" value="<%id%>" />\
<input type="hidden" name="parent" value="" />\
</form>\
</div>\
</div>';
var commentTemplate = '\
<div id="cd<%id%>" class="sphinx-comment<%css_class%>">\
<div class="vote">\
<div class="arrow">\
<a href="#" id="uv<%id%>" class="vote" title="vote up">\
<img src="<%upArrow%>" />\
</a>\
<a href="#" id="uu<%id%>" class="un vote" title="vote up">\
<img src="<%upArrowPressed%>" />\
</a>\
</div>\
<div class="arrow">\
<a href="#" id="dv<%id%>" class="vote" title="vote down">\
<img src="<%downArrow%>" id="da<%id%>" />\
</a>\
<a href="#" id="du<%id%>" class="un vote" title="vote down">\
<img src="<%downArrowPressed%>" />\
</a>\
</div>\
</div>\
<div class="comment-content">\
<p class="tagline comment">\
<span class="user-id"><%username%></span>\
<span class="rating"><%pretty_rating%></span>\
<span class="delta"><%time.delta%></span>\
</p>\
<div class="comment-text comment"><#text#></div>\
<p class="comment-opts comment">\
<a href="#" class="reply hidden" id="rl<%id%>">reply &#9657;</a>\
<a href="#" class="close-reply" id="cr<%id%>">reply &#9663;</a>\
<a href="#" id="sp<%id%>" class="show-proposal">proposal &#9657;</a>\
<a href="#" id="hp<%id%>" class="hide-proposal">proposal &#9663;</a>\
<a href="#" id="dc<%id%>" class="delete-comment hidden">delete</a>\
<span id="cm<%id%>" class="moderation hidden">\
<a href="#" id="ac<%id%>" class="accept-comment">accept</a>\
</span>\
</p>\
<pre class="proposal" id="pr<%id%>">\
<#proposal_diff#>\
</pre>\
<ul class="comment-children" id="cl<%id%>"></ul>\
</div>\
<div class="clearleft"></div>\
</div>\
</div>';
var replyTemplate = '\
<li>\
<div class="reply-div" id="rd<%id%>">\
<form id="rf<%id%>">\
<textarea name="comment" cols="80"></textarea>\
<input type="submit" value="Add reply" />\
<input type="button" value="Cancel" />\
<input type="hidden" name="parent" value="<%id%>" />\
<input type="hidden" name="node" value="" />\
</form>\
</div>\
</li>';
$(document).ready(function() {
init();
});
})(jQuery);
$(document).ready(function() {
// add comment anchors for all paragraphs that are commentable
$('.sphinx-has-comment').comment();
// highlight search words in search results
$("div.context").each(function() {
var params = $.getQueryParameters();
var terms = (params.q) ? params.q[0].split(/\s+/) : [];
var result = $(this);
$.each(terms, function() {
result.highlightText(this.toLowerCase(), 'highlighted');
});
});
// directly open comment window if requested
var anchor = document.location.hash;
if (anchor.substring(0, 9) == '#comment-') {
$('#ao' + anchor.substring(9)).click();
document.location.hash = '#s' + anchor.substring(9);
}
});

View File

@ -1,93 +0,0 @@
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Index &#8212; recoll 1.25.12 documentation</title>
<link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '1.25.12',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="index" title="Index" href="#" />
<link rel="search" title="Search" href="search.html" />
<link rel="top" title="recoll 1.25.12 documentation" href="usermanual.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head>
<body role="document">
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1 id="index">Index</h1>
<div class="genindex-jumpbox">
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="usermanual.html">Documentation overview</a><ul>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<div><input type="text" name="q" /></div>
<div><input type="submit" value="Go" /></div>
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2019, J.F. Dockes.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 1.4.9</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.8</a>
</div>
</body>
</html>

View File

@ -1,103 +0,0 @@
<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Search &#8212; recoll 1.25.12 documentation</title>
<link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '1.25.12',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/searchtools.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="#" />
<link rel="top" title="recoll 1.25.12 documentation" href="usermanual.html" />
<script type="text/javascript">
jQuery(function() { Search.loadIndex("searchindex.js"); });
</script>
<script type="text/javascript" id="searchindexloader"></script>
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head>
<body role="document">
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1 id="search-documentation">Search</h1>
<div id="fallback" class="admonition warning">
<script type="text/javascript">$('#fallback').hide();</script>
<p>
Please activate JavaScript to enable the search
functionality.
</p>
</div>
<p>
From here you can search these documents. Enter your search
words into the box below and click "search". Note that the search
function will automatically search for all of the words. Pages
containing fewer words won't appear in the result list.
</p>
<form action="" method="get">
<input type="text" name="q" value="" />
<input type="submit" value="search" />
<span id="search-progress" style="padding-left: 10px"></span>
</form>
<div id="search-results">
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper"><div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="usermanual.html">Documentation overview</a><ul>
</ul></li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2019, J.F. Dockes.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 1.4.9</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.8</a>
</div>
</body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,339 +0,0 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# recoll documentation build configuration file, created by
# sphinx-quickstart on Fri Apr 12 19:48:21 2019.
#
# This file is execfile()d with the current directory set to its
# containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
# import os
# import sys
# sys.path.insert(0, os.path.abspath('.'))
# -- General configuration ------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
#
# needs_sphinx = '1.0'
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = []
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string:
#
# source_suffix = ['.rst', '.md']
source_suffix = '.rst'
# The encoding of source files.
#
# source_encoding = 'utf-8-sig'
# The master toctree document.
master_doc = 'usermanual'
# General information about the project.
project = 'recoll'
copyright = '2019, J.F. Dockes'
author = 'J.F. Dockes'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = '1.25.12'
# The full version, including alpha/beta/rc tags.
release = '1.25.12'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#
# This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases.
language = None
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
#
# today = ''
#
# Else, today_fmt is used as the format for a strftime call.
#
# today_fmt = '%B %d, %Y'
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This patterns also effect to html_static_path and html_extra_path
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
# The reST default role (used for this markup: `text`) to use for all
# documents.
#
# default_role = None
# If true, '()' will be appended to :func: etc. cross-reference text.
#
# add_function_parentheses = True
# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
#
# add_module_names = True
# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
#
# show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
# A list of ignored prefixes for module index sorting.
# modindex_common_prefix = []
# If true, keep warnings as "system message" paragraphs in the built documents.
# keep_warnings = False
# If true, `todo` and `todoList` produce output, else they produce nothing.
todo_include_todos = False
# -- Options for HTML output ----------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
#
html_theme = 'alabaster'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
#
# html_theme_options = {}
# Add any paths that contain custom themes here, relative to this directory.
# html_theme_path = []
# The name for this set of Sphinx documents.
# "<project> v<release> documentation" by default.
#
# html_title = 'recoll v1.25.12'
# A shorter title for the navigation bar. Default is the same as html_title.
#
# html_short_title = None
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
#
# html_logo = None
# The name of an image file (relative to this directory) to use as a favicon of
# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
#
# html_favicon = None
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
# Add any extra paths that contain custom files (such as robots.txt or
# .htaccess) here, relative to this directory. These files are copied
# directly to the root of the documentation.
#
# html_extra_path = []
# If not None, a 'Last updated on:' timestamp is inserted at every page
# bottom, using the given strftime format.
# The empty string is equivalent to '%b %d, %Y'.
#
# html_last_updated_fmt = None
# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
#
# html_use_smartypants = True
# Custom sidebar templates, maps document names to template names.
#
# html_sidebars = {}
# Additional templates that should be rendered to pages, maps page names to
# template names.
#
# html_additional_pages = {}
# If false, no module index is generated.
#
# html_domain_indices = True
# If false, no index is generated.
#
# html_use_index = True
# If true, the index is split into individual pages for each letter.
#
# html_split_index = False
# If true, links to the reST sources are added to the pages.
#
# html_show_sourcelink = True
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
#
# html_show_sphinx = True
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
#
# html_show_copyright = True
# If true, an OpenSearch description file will be output, and all pages will
# contain a <link> tag referring to it. The value of this option must be the
# base URL from which the finished HTML is served.
#
# html_use_opensearch = ''
# This is the file name suffix for HTML files (e.g. ".xhtml").
# html_file_suffix = None
# Language to be used for generating the HTML full-text search index.
# Sphinx supports the following languages:
# 'da', 'de', 'en', 'es', 'fi', 'fr', 'h', 'it', 'ja'
# 'nl', 'no', 'pt', 'ro', 'r', 'sv', 'tr', 'zh'
#
# html_search_language = 'en'
# A dictionary with options for the search language support, empty by default.
# 'ja' uses this config value.
# 'zh' user can custom change `jieba` dictionary path.
#
# html_search_options = {'type': 'default'}
# The name of a javascript file (relative to the configuration directory) that
# implements a search results scorer. If empty, the default will be used.
#
# html_search_scorer = 'scorer.js'
# Output file base name for HTML help builder.
htmlhelp_basename = 'recolldoc'
# -- Options for LaTeX output ---------------------------------------------
latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
#
# 'papersize': 'letterpaper',
# The font size ('10pt', '11pt' or '12pt').
#
# 'pointsize': '10pt',
# Additional stuff for the LaTeX preamble.
#
# 'preamble': '',
# Latex figure (float) alignment
#
# 'figure_align': 'htbp',
}
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
(master_doc, 'recoll.tex', 'recoll Documentation',
'J.F. Dockes', 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
# the title page.
#
# latex_logo = None
# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.
#
# latex_use_parts = False
# If true, show page references after internal links.
#
# latex_show_pagerefs = False
# If true, show URL addresses after external links.
#
# latex_show_urls = False
# Documents to append as an appendix to all manuals.
#
# latex_appendices = []
# It false, will not define \strong, \code, itleref, \crossref ... but only
# \sphinxstrong, ..., \sphinxtitleref, ... To help avoid clash with user added
# packages.
#
# latex_keep_old_macro_names = True
# If false, no module index is generated.
#
# latex_domain_indices = True
# -- Options for manual page output ---------------------------------------
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
(master_doc, 'recoll', 'recoll Documentation',
[author], 1)
]
# If true, show URL addresses after external links.
#
# man_show_urls = False
# -- Options for Texinfo output -------------------------------------------
# Grouping the document tree into Texinfo files. List of tuples
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
(master_doc, 'recoll', 'recoll Documentation',
author, 'recoll', 'One line description of project.',
'Miscellaneous'),
]
# Documents to append as an appendix to all manuals.
#
# texinfo_appendices = []
# If false, no module index is generated.
#
# texinfo_domain_indices = True
# How to display URL addresses: 'footnote', 'no', or 'inline'.
#
# texinfo_show_urls = 'footnote'
# If true, do not generate a @detailmenu in the "Top" node's menu.
#
# texinfo_no_detailmenu = False

View File

@ -154,7 +154,7 @@ discriminate two terms based on diacritics (``sake`` / ``saké``,
RCL can optionally store the raw terms, without accent stripping or case RCL can optionally store the raw terms, without accent stripping or case
conversion. In this configuration, default searches will behave as conversion. In this configuration, default searches will behave as
before, but it is possible to perform searches sensitive to case and before, but it is possible to perform searches sensitive to case and
diacritics. This is described in more detail in the `section about index diacritics. This is described in more detail in the section about `index
case and diacritics sensitivity <#RCL.INDEXING.CONFIG.SENS>`__. case and diacritics sensitivity <#RCL.INDEXING.CONFIG.SENS>`__.
RCL has many parameters which define exactly what to index, and how to RCL has many parameters which define exactly what to index, and how to
@ -186,7 +186,7 @@ However, there are other ways to perform RCL searches:
- A `command line interface <#RCL.SEARCH.COMMANDLINE>`__. - A `command line interface <#RCL.SEARCH.COMMANDLINE>`__.
- A `Python programming interface <#RCL.PROGRAM.PYTHONAPI>`__ - A `Pythonprogramming interface <#RCL.PROGRAM.PYTHONAPI>`__
- A `KDE KIO slave module <#RCL.SEARCH.KIO>`__. - A `KDE KIO slave module <#RCL.SEARCH.KIO>`__.
@ -586,7 +586,7 @@ determines what subtrees and files get indexed.
The applications needed to index file types other than text, HTML or The applications needed to index file types other than text, HTML or
email (ie: pdf, postscript, ms-word...) are described in the `external email (ie: pdf, postscript, ms-word...) are described in the `external
packages section. <#RCL.INSTALL.EXTERNAL>`__ packages section <#RCL.INSTALL.EXTERNAL>`__.
As of Recoll 1.18 there are two incompatible types of Recoll indexes, As of Recoll 1.18 there are two incompatible types of Recoll indexes,
depending on the treatment of character case and diacritics. A `further depending on the treatment of character case and diacritics. A `further
@ -1934,7 +1934,7 @@ list and any entry field (the end of lines will be taken care of).
Multiple indexes Multiple indexes
~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~
See the `section describing the use of multiple See the section describing `the use of multiple
indexes <#RCL.INDEXING.CONFIG.MULTIPLE>`__ for generalities. Only the indexes <#RCL.INDEXING.CONFIG.MULTIPLE>`__ for generalities. Only the
aspects concerning the ``recoll`` GUI are described here. aspects concerning the ``recoll`` GUI are described here.
@ -2326,7 +2326,7 @@ indexes are searched.
- Edit result page HTML header insert: allows you to define text - Edit result page HTML header insert: allows you to define text
inserted at the end of the result page HTML header. More detail in inserted at the end of the result page HTML header. More detail in
the `result list customisation the `result list customisation
section. <#RCL.SEARCH.GUI.CUSTOM.RESLIST>`__ section <#RCL.SEARCH.GUI.CUSTOM.RESLIST>`__.
- Date format: allows specifying the format used for displaying dates - Date format: allows specifying the format used for displaying dates
inside the result list. This should be specified as an strftime() inside the result list. This should be specified as an strftime()
@ -2415,7 +2415,7 @@ two elements:
- HTML code inside the header section. For versions 1.21 and later, - HTML code inside the header section. For versions 1.21 and later,
this is also used for the `snippets this is also used for the `snippets
window <#RCL.SEARCH.GUI.RESULTLIST.MENU.SNIPPETS>`__ window <#RCL.SEARCH.GUI.RESULTLIST.MENU.SNIPPETS>`__.
The paragraph format and the header fragment can be edited from the The paragraph format and the header fragment can be edited from the
Result list tab of the GUI configuration. Result list tab of the GUI configuration.
@ -2925,7 +2925,7 @@ RCL currently manages the following default fields:
RCL 1.20 and later have a way to specify aliases for the field names, RCL 1.20 and later have a way to specify aliases for the field names,
which will save typing, for example by aliasing ``filename`` to fn or which will save typing, for example by aliasing ``filename`` to fn or
``containerfilename`` to cfn. See the `section about the ``fields`` ``containerfilename`` to cfn. See the `section about the ``fields``
file <#RCL.INSTALL.CONFIG.FIELDS>`__ file <#RCL.INSTALL.CONFIG.FIELDS>`__.
The document input handlers used while indexing have the possibility to The document input handlers used while indexing have the possibility to
create other fields with arbitrary names, and aliases may be defined in create other fields with arbitrary names, and aliases may be defined in

View File

@ -663,10 +663,10 @@ alink="#0000FF">
conversion. In this configuration, default searches will conversion. In this configuration, default searches will
behave as before, but it is possible to perform searches behave as before, but it is possible to perform searches
sensitive to case and diacritics. This is described in more sensitive to case and diacritics. This is described in more
detail in the <a class="link" href= detail in the section about <a class="link" href=
"#RCL.INDEXING.CONFIG.SENS" title= "#RCL.INDEXING.CONFIG.SENS" title=
"2.3.2.&nbsp;Index case and diacritics sensitivity">section "2.3.2.&nbsp;Index case and diacritics sensitivity">index
about index case and diacritics sensitivity</a>.</p> case and diacritics sensitivity</a>.</p>
<p><span class="application">Recoll</span> has many <p><span class="application">Recoll</span> has many
parameters which define exactly what to index, and how to parameters which define exactly what to index, and how to
classify and decode the source documents. These are kept in classify and decode the source documents. These are kept in
@ -720,7 +720,7 @@ alink="#0000FF">
<li class="listitem"> <li class="listitem">
<p>A <a class="link" href="#RCL.PROGRAM.PYTHONAPI" <p>A <a class="link" href="#RCL.PROGRAM.PYTHONAPI"
title="5.3.&nbsp;Python API"><span class= title="5.3.&nbsp;Python API"><span class=
"application">Python</span> programming "application">Python</span>programming
interface</a></p> interface</a></p>
</li> </li>
<li class="listitem"> <li class="listitem">
@ -1359,7 +1359,7 @@ alink="#0000FF">
described in the <a class="link" href= described in the <a class="link" href=
"#RCL.INSTALL.EXTERNAL" title= "#RCL.INSTALL.EXTERNAL" title=
"6.2.&nbsp;Supporting packages">external packages "6.2.&nbsp;Supporting packages">external packages
section.</a></p> section</a>.</p>
<p>As of Recoll 1.18 there are two incompatible types of <p>As of Recoll 1.18 there are two incompatible types of
Recoll indexes, depending on the treatment of character Recoll indexes, depending on the treatment of character
case and diacritics. A <a class="link" href= case and diacritics. A <a class="link" href=
@ -1464,7 +1464,7 @@ recoll -c <em class=
main configuration file <a class="link" href= main configuration file <a class="link" href=
"#RCL.INSTALL.CONFIG.RECOLLCONF" title= "#RCL.INSTALL.CONFIG.RECOLLCONF" title=
"6.4.2.&nbsp;Recoll main configuration file, recoll.conf"> "6.4.2.&nbsp;Recoll main configuration file, recoll.conf">
<code class="filename">recoll.conf</code></a> .</p> <code class="filename">recoll.conf</code></a>.</p>
<p>Creating and updating the index can be done from the <p>Creating and updating the index can be done from the
command line:</p> command line:</p>
<pre class="programlisting">recollindex -c <em class= <pre class="programlisting">recollindex -c <em class=
@ -3376,7 +3376,7 @@ recoll -c <em class=
<em class="replaceable"><code>xapi</code></em>. <em class="replaceable"><code>xapi</code></em>.
(More about wildcards <a class="link" href= (More about wildcards <a class="link" href=
"#RCL.SEARCH.WILDCARDS" title= "#RCL.SEARCH.WILDCARDS" title=
"3.8.1.&nbsp;More about wildcards">here</a>).</p> "3.8.1.&nbsp;More about wildcards">here</a> ).</p>
</dd> </dd>
<dt><span class="term">Regular expression</span></dt> <dt><span class="term">Regular expression</span></dt>
<dd> <dd>
@ -3447,13 +3447,12 @@ recoll -c <em class=
</div> </div>
</div> </div>
</div> </div>
<p>See the <a class="link" href= <p>See the section describing <a class="link" href=
"#RCL.INDEXING.CONFIG.MULTIPLE" title= "#RCL.INDEXING.CONFIG.MULTIPLE" title=
"2.3.1.&nbsp;Multiple indexes">section describing the use "2.3.1.&nbsp;Multiple indexes">the use of multiple
of multiple indexes</a> for generalities. Only the indexes</a> for generalities. Only the aspects concerning
aspects concerning the <span class= the <span class="command"><strong>recoll</strong></span>
"command"><strong>recoll</strong></span> GUI are GUI are described here.</p>
described here.</p>
<p>A <span class="command"><strong>recoll</strong></span> <p>A <span class="command"><strong>recoll</strong></span>
program instance is always associated with a specific program instance is always associated with a specific
index, which is the one to be updated when requested from index, which is the one to be updated when requested from
@ -4029,7 +4028,7 @@ recoll -c <em class=
detail in the <a class="link" href= detail in the <a class="link" href=
"#RCL.SEARCH.GUI.CUSTOM.RESLIST" title= "#RCL.SEARCH.GUI.CUSTOM.RESLIST" title=
"The result list format">result list customisation "The result list format">result list customisation
section.</a></p> section</a>.</p>
</li> </li>
<li class="listitem"> <li class="listitem">
<p><span class="guilabel">Date format</span>: <p><span class="guilabel">Date format</span>:
@ -4124,7 +4123,7 @@ recoll -c <em class=
name suffixes</span>: a list of words which name suffixes</span>: a list of words which
automatically get turned into <code class= automatically get turned into <code class=
"literal">ext:xxx</code> file name suffix clauses "literal">ext:xxx</code> file name suffix clauses
when starting a query language query (ie: when starting a query language query (e.g.:
<code class="literal">doc xls xlsx...</code>). This <code class="literal">doc xls xlsx...</code>). This
will save some typing for people who use file types will save some typing for people who use file types
a lot when querying.</p> a lot when querying.</p>
@ -4184,7 +4183,7 @@ recoll -c <em class=
versions 1.21 and later, this is also used for versions 1.21 and later, this is also used for
the <a class="link" href= the <a class="link" href=
"#RCL.SEARCH.GUI.RESULTLIST.MENU.SNIPPETS">snippets "#RCL.SEARCH.GUI.RESULTLIST.MENU.SNIPPETS">snippets
window</a></p> window</a>.</p>
</li> </li>
</ul> </ul>
</div> </div>
@ -4893,7 +4892,7 @@ recoll -c <em class=
"replaceable"><code>cfn</code></em>. See the <a class= "replaceable"><code>cfn</code></em>. See the <a class=
"link" href="#RCL.INSTALL.CONFIG.FIELDS" title= "link" href="#RCL.INSTALL.CONFIG.FIELDS" title=
"6.4.3.&nbsp;The fields file">section about the "6.4.3.&nbsp;The fields file">section about the
<code class="filename">fields</code> file</a></p> <code class="filename">fields</code> file</a>.</p>
<p>The document input handlers used while indexing have the <p>The document input handlers used while indexing have the
possibility to create other fields with arbitrary names, possibility to create other fields with arbitrary names,
and aliases may be defined in the configuration, so that and aliases may be defined in the configuration, so that

View File

@ -90,8 +90,9 @@
directories</guilabel> section).</para> directories</guilabel> section).</para>
<para>On Unix/Linux, you may need to install the <para>On Unix/Linux, you may need to install the
appropriate <link linkend="RCL.INSTALL.EXTERNAL"> supporting appropriate
applications</link> for document types that need them (for <link linkend="RCL.INSTALL.EXTERNAL">supporting applications</link>
for document types that need them (for
example <application>antiword</application> for example <application>antiword</application> for
<application>Microsoft Word</application> files).</para> <application>Microsoft Word</application> files).</para>
@ -230,14 +231,15 @@
stripping or case conversion. In this configuration, default searches stripping or case conversion. In this configuration, default searches
will behave as before, but it is possible to perform searches will behave as before, but it is possible to perform searches
sensitive to case and diacritics. This is described in more detail in sensitive to case and diacritics. This is described in more detail in
the <link linkend="RCL.INDEXING.CONFIG.SENS">section about index case the section about
and diacritics sensitivity</link>.</para> <link linkend="RCL.INDEXING.CONFIG.SENS">index case and diacritics sensitivity</link>.
</para>
<para>&RCL; has many parameters which define exactly what to <para>&RCL; has many parameters which define exactly what to
index, and how to classify and decode the source index, and how to classify and decode the source
documents. These are kept in <link documents. These are kept in
linkend="RCL.INDEXING.CONFIG">configuration files</link>. A <link linkend="RCL.INDEXING.CONFIG">configuration files</link>.
default configuration is copied into a standard location A default configuration is copied into a standard location
(usually something like (usually something like
<filename>/usr/share/recoll/examples</filename>) <filename>/usr/share/recoll/examples</filename>)
during installation. The default values set by the during installation. The default values set by the
@ -253,8 +255,8 @@
the <command>recoll</command> GUI are stored in the standard the <command>recoll</command> GUI are stored in the standard
location defined by <application>Qt</application>.</para> location defined by <application>Qt</application>.</para>
<para>The <link linkend="RCL.INDEXING.PERIODIC.EXEC">indexing <para>The <link linkend="RCL.INDEXING.PERIODIC.EXEC">indexing process</link>
process</link> is started automatically (after asking permission), the is started automatically (after asking permission), the
first time you execute the <command>recoll</command> GUI. Indexing first time you execute the <command>recoll</command> GUI. Indexing
can also be performed by executing the <command>recollindex</command> can also be performed by executing the <command>recollindex</command>
command. &RCL; indexing is multithreaded by default when appropriate command. &RCL; indexing is multithreaded by default when appropriate
@ -267,23 +269,22 @@
options to help you find what you are looking for. However, there options to help you find what you are looking for. However, there
are other ways to perform &RCL; searches: are other ways to perform &RCL; searches:
<itemizedlist> <itemizedlist>
<listitem><para>A <link linkend="RCL.SEARCH.COMMANDLINE"> <listitem><para>A
command line interface</link>.</para></listitem> <link linkend="RCL.SEARCH.COMMANDLINE">command line interface</link>.
<listitem><para>A <link linkend="RCL.PROGRAM.PYTHONAPI"> </para></listitem>
<application>Python</application> <listitem><para>A
programming interface</link></para></listitem> <link linkend="RCL.PROGRAM.PYTHONAPI"><application>Python</application>programming interface</link>
<listitem><para>A <link linkend="RCL.SEARCH.KIO"> </para></listitem>
<application>KDE</application> KIO slave <listitem><para>A <link linkend="RCL.SEARCH.KIO"><application>KDE</application> KIO slave module</link>.
module</link>.</para></listitem> </para></listitem>
<listitem><para>A Ubuntu Unity <ulink <listitem><para>A Ubuntu Unity
url="https://www.lesbonscomptes.com/recoll/download.html">Scope</ulink> <ulink url="https://www.lesbonscomptes.com/recoll/download.html">Scope</ulink>
module.</para></listitem> module.</para></listitem>
<listitem><para>A Gnome Shell <ulink <listitem><para>A Gnome Shell
url="https://www.lesbonscomptes.com/recoll/download.html">Search <ulink url="https://www.lesbonscomptes.com/recoll/download.html">Search Provider</ulink>.
Provider</ulink>.</para></listitem> </para></listitem>
<listitem><para>A <ulink <listitem><para>A
url="https://github.com/koniu/recoll-webui">WEB <ulink url="https://github.com/koniu/recoll-webui">WEB interface</ulink>.
interface</ulink>.
</para></listitem> </para></listitem>
</itemizedlist> </itemizedlist>
</para> </para>
@ -333,18 +334,15 @@
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<formalpara> <formalpara>
<title><link linkend="RCL.INDEXING.PERIODIC"> <title><link linkend="RCL.INDEXING.PERIODIC">Periodic (or batch) indexing:</link></title>
Periodic (or batch) indexing:</link></title>
<para><command>recollindex</command> is executed <para><command>recollindex</command> is executed
at discrete times. The typical usage is to have a nightly run at discrete times. The typical usage is to have a nightly run
<link linkend="RCL.INDEXING.PERIODIC.AUTOMAT"> <link linkend="RCL.INDEXING.PERIODIC.AUTOMAT">programmed</link> into
programmed</link> into
your <command>cron</command> file.</para> your <command>cron</command> file.</para>
</formalpara> </formalpara>
</listitem> </listitem>
<listitem> <listitem>
<formalpara><title><link linkend="RCL.INDEXING.MONITOR">Real <formalpara><title><link linkend="RCL.INDEXING.MONITOR">Real time indexing:</link></title>
time indexing:</link></title>
<para><command>recollindex</command> runs permanently as a <para><command>recollindex</command> runs permanently as a
daemon and uses a file system alteration monitor daemon and uses a file system alteration monitor
(e.g. <application>inotify</application>) to detect file (e.g. <application>inotify</application>) to detect file
@ -364,8 +362,8 @@
<para>With &RCL; 1.24 and newer, it is also possible to set up an <para>With &RCL; 1.24 and newer, it is also possible to set up an
index so that only a subset of the tree will be monitored and the index so that only a subset of the tree will be monitored and the
rest will be covered by batch/incremental indexing. (See the rest will be covered by batch/incremental indexing. (See the
details in the <link linkend="RCL.INDEXING.MONITOR">Real time details in the <link linkend="RCL.INDEXING.MONITOR">Real time indexing</link>
indexing</link> section.</para> section.</para>
<para>The choice of method and the parameters used can be <para>The choice of method and the parameters used can be
configured from the <command>recoll</command> GUI: configured from the <command>recoll</command> GUI:
@ -396,8 +394,8 @@
<title>Configurations, multiple indexes</title> <title>Configurations, multiple indexes</title>
<para>&RCL; supports defining multiple indexes, each defined by its <para>&RCL; supports defining multiple indexes, each defined by its
own <link linkend="RCL.INDEXING.CONFIG">configuration own <link linkend="RCL.INDEXING.CONFIG">configuration directory</link>,
directory</link>, in which several configuration files describe in which several configuration files describe
what should be indexed and how.</para> what should be indexed and how.</para>
<para>A default personal configuration directory <para>A default personal configuration directory
@ -462,9 +460,9 @@
that some parameters should be consistent among the configurations that some parameters should be consistent among the configurations
for indexes which are to be used together.</para> for indexes which are to be used together.</para>
<para>See the section about <link <para>See the section about
linkend="RCL.INDEXING.CONFIG.MULTIPLE">configuring multiple <link linkend="RCL.INDEXING.CONFIG.MULTIPLE">configuring multiple indexes</link>
indexes</link> for more detail</para> for more detail</para>
</sect2> </sect2>
@ -472,8 +470,8 @@
<title>Document types</title> <title>Document types</title>
<para>&RCL; knows about quite a few different document <para>&RCL; knows about quite a few different document
types. The parameters for document types recognition and types. The parameters for document types recognition and
processing are set in processing are set in <link linkend="RCL.INDEXING.CONFIG">configuration files</link>.
<link linkend="RCL.INDEXING.CONFIG">configuration files</link>.</para> </para>
<para>Most file types, like HTML or word processing files, only hold <para>Most file types, like HTML or word processing files, only hold
one document. Some file types, like email folders or zip one document. Some file types, like email folders or zip
@ -490,7 +488,7 @@
<para>Other file types (ie: postscript, pdf, ms-word, rtf ...) <para>Other file types (ie: postscript, pdf, ms-word, rtf ...)
need external applications for preprocessing. The list is in the need external applications for preprocessing. The list is in the
<link linkend="RCL.INSTALL.EXTERNAL"> installation</link> <link linkend="RCL.INSTALL.EXTERNAL">installation</link>
section. After every indexing operation, &RCL; updates a list of section. After every indexing operation, &RCL; updates a list of
commands that would be needed for indexing existing files commands that would be needed for indexing existing files
types. This list can be displayed by selecting the menu option types. This list can be displayed by selecting the menu option
@ -520,8 +518,8 @@
<para>You can also define an exclusive list of MIME types to be <para>You can also define an exclusive list of MIME types to be
indexed (no others will be indexed), by settting indexed (no others will be indexed), by settting
the <link linkend="RCL.INSTALL.CONFIG.RECOLLCONF.INDEXEDMIMETYPES"> the <link linkend="RCL.INSTALL.CONFIG.RECOLLCONF.INDEXEDMIMETYPES">indexedmimetypes</link>
indexedmimetypes</link> configuration variable. Example:<programlisting> configuration variable. Example:<programlisting>
indexedmimetypes = text/html application/pdf indexedmimetypes = text/html application/pdf
</programlisting> </programlisting>
It is possible to redefine this parameter for It is possible to redefine this parameter for
@ -536,9 +534,8 @@
<para><literal>excludedmimetypes</literal> or <para><literal>excludedmimetypes</literal> or
<literal>indexedmimetypes</literal>, can be set either by editing <literal>indexedmimetypes</literal>, can be set either by editing
the <link linkend="RCL.INSTALL.CONFIG.RECOLLCONF">configuration the <link linkend="RCL.INSTALL.CONFIG.RECOLLCONF">configuration file (<filename>recoll.conf</filename>)</link>
file (<filename>recoll.conf</filename>)</link> for for the index, or by using the GUI index configuration tool.</para>
the index, or by using the GUI index configuration tool.</para>
<note><title>Note about MIME types</title> <note><title>Note about MIME types</title>
<para>When editing the <literal>indexedmimetypes</literal> <para>When editing the <literal>indexedmimetypes</literal>
@ -614,9 +611,9 @@
<listitem><para>For a given configuration directory, you can <listitem><para>For a given configuration directory, you can
specify a non-default storage location for the index by setting specify a non-default storage location for the index by setting
the <varname>dbdir</varname> parameter in the configuration file the <varname>dbdir</varname> parameter in the configuration file
(see the <link (see the
linkend="RCL.INSTALL.CONFIG.RECOLLCONF">configuration <link linkend="RCL.INSTALL.CONFIG.RECOLLCONF">configuration section</link>).
section</link>). This method would mainly be of use if you wanted This method would mainly be of use if you wanted
to keep the configuration directory in its default location, but to keep the configuration directory in its default location, but
desired another location for the index, typically out of disk desired another location for the index, typically out of disk
occupation or performance concerns.</para> occupation or performance concerns.</para>
@ -637,9 +634,9 @@
the index in the index in
<filename>~/.indexes-email/xapiandb/</filename>.</para> <filename>~/.indexes-email/xapiandb/</filename>.</para>
<para>Using multiple configuration directories and <link <para>Using multiple configuration directories and
linkend="RCL.INSTALL.CONFIG.RECOLLCONF">configuration <link linkend="RCL.INSTALL.CONFIG.RECOLLCONF">configuration options</link>
options</link> allows you to tailor multiple configurations and allows you to tailor multiple configurations and
indexes to handle whatever subset of the available data you wish indexes to handle whatever subset of the available data you wish
to make searchable.</para> to make searchable.</para>
</listitem> </listitem>
@ -753,8 +750,8 @@
control which areas of the file system are indexed, and how control which areas of the file system are indexed, and how
files are processed. These variables can be set either by files are processed. These variables can be set either by
editing the text files or by using the editing the text files or by using the
<link linkend="RCL.INDEXING.CONFIG.GUI"> dialogs in the <link linkend="RCL.INDEXING.CONFIG.GUI"> dialogs in the <command>recoll</command> GUI</link>.
<command>recoll</command> GUI</link>.</para> </para>
<para>The first time you start <command>recoll</command>, you <para>The first time you start <command>recoll</command>, you
will be asked whether or not you would like it to build the will be asked whether or not you would like it to build the
@ -775,19 +772,19 @@
man page, but the most current information will most likely be the man page, but the most current information will most likely be the
comments inside the sample file. The most immediately useful variable comments inside the sample file. The most immediately useful variable
is probably is probably
<link linkend="RCL.INSTALL.CONFIG.RECOLLCONF.TOPDIRS"> <link linkend="RCL.INSTALL.CONFIG.RECOLLCONF.TOPDIRS"><varname>topdirs</varname></link>,
<varname>topdirs</varname></link>,
which determines what subtrees and files get indexed.</para> which determines what subtrees and files get indexed.</para>
<para>The applications needed to index file types other than <para>The applications needed to index file types other than
text, HTML or email (ie: pdf, postscript, ms-word...) are text, HTML or email (ie: pdf, postscript, ms-word...) are
described in the <link linkend="RCL.INSTALL.EXTERNAL">external described in the <link linkend="RCL.INSTALL.EXTERNAL">external packages section</link>.
packages section.</link></para> </para>
<para>As of Recoll 1.18 there are two incompatible types of Recoll <para>As of Recoll 1.18 there are two incompatible types of Recoll
indexes, depending on the treatment of character case and indexes, depending on the treatment of character case and
diacritics. A <link linkend="RCL.INDEXING.CONFIG.SENS">further diacritics. A
section</link> describes the two types in more detail.</para> <link linkend="RCL.INDEXING.CONFIG.SENS">further section</link>
describes the two types in more detail.</para>
<sect2 id="RCL.INDEXING.CONFIG.MULTIPLE"> <sect2 id="RCL.INDEXING.CONFIG.MULTIPLE">
<title>Multiple indexes</title> <title>Multiple indexes</title>
@ -836,8 +833,8 @@
have the same option concerning character case and diacritics have the same option concerning character case and diacritics
stripping, but there are other constraints. Most of the stripping, but there are other constraints. Most of the
relevant parameters are described in the relevant parameters are described in the
<link linkend="RCL.INSTALL.CONFIG.RECOLLCONF.TERMS">linked <link linkend="RCL.INSTALL.CONFIG.RECOLLCONF.TERMS">linked section</link>.
section</link>.</para> </para>
<para>The different search interfaces (GUI, command line, ...) <para>The different search interfaces (GUI, command line, ...)
have different methods to define the set of indexes to be have different methods to define the set of indexes to be
@ -921,8 +918,9 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
between terms, returning different results when searching for between terms, returning different results when searching for
<literal>US</literal> and <literal>us</literal> or <literal>US</literal> and <literal>us</literal> or
<literal>resume</literal> and <literal>résumé</literal>. <literal>resume</literal> and <literal>résumé</literal>.
Read the <link linkend="RCL.SEARCH.CASEDIAC">section about search Read the
case and diacritics sensitivity</link> for more details.</para> <link linkend="RCL.SEARCH.CASEDIAC">section about search case and diacritics sensitivity</link>
for more details.</para>
<para>The type of index to be created is controlled by the <para>The type of index to be created is controlled by the
<literal>indexStripChars</literal> configuration <literal>indexStripChars</literal> configuration
@ -1089,8 +1087,9 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
<para>The meaning for most entries in the interface is <para>The meaning for most entries in the interface is
self-evident and documented by a <literal>ToolTip</literal> self-evident and documented by a <literal>ToolTip</literal>
popup on the text label. For more detail, you will need to popup on the text label. For more detail, you will need to
refer to the <link linkend="RCL.INSTALL.CONFIG">configuration refer to the
section</link> of this guide.</para> <link linkend="RCL.INSTALL.CONFIG">configuration section</link>
of this guide.</para>
<para>The configuration tool normally respects the comments <para>The configuration tool normally respects the comments
and most of the formatting inside the configuration file, so and most of the formatting inside the configuration file, so
@ -1185,8 +1184,7 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
<para>By default, other attributes are handled as &RCL; fields. <para>By default, other attributes are handled as &RCL; fields.
On Linux, the <literal>user</literal> prefix is removed from On Linux, the <literal>user</literal> prefix is removed from
the name. This can be configured more precisely inside the name. This can be configured more precisely inside
the <link linkend="RCL.INSTALL.CONFIG.FIELDS"> the <link linkend="RCL.INSTALL.CONFIG.FIELDS"><filename>fields</filename> configuration file</link>.
<filename>fields</filename> configuration file</link>.
</para> </para>
</sect1> </sect1>
@ -1200,9 +1198,8 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
indexing.</para> indexing.</para>
<para>See the <para>See the
<link linkend="RCL.INSTALL.CONFIG.RECOLLCONF.METADATACMDS">section <link linkend="RCL.INSTALL.CONFIG.RECOLLCONF.METADATACMDS">section about the <literal>metadatacmds</literal> field</link>
about the <literal>metadatacmds</literal> field</link> in in the main configuration chapter for a description of the
the main configuration chapter for a description of the
configuration syntax.</para> configuration syntax.</para>
<para>As an example, if you would want &RCL; to use tags managed by <para>As an example, if you would want &RCL; to use tags managed by
@ -1632,8 +1629,8 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
<para>&RCL; provides a configuration option to specify the minimum <para>&RCL; provides a configuration option to specify the minimum
time before which a file, specified by a wildcard pattern, cannot be time before which a file, specified by a wildcard pattern, cannot be
reindexed. See the <varname>mondelaypatterns</varname> parameter in reindexed. See the <varname>mondelaypatterns</varname> parameter in
the <link linkend="RCL.INSTALL.CONFIG.RECOLLCONF.MISC"> the <link linkend="RCL.INSTALL.CONFIG.RECOLLCONF.MISC">configuration section</link>.
configuration section</link>.</para> </para>
</note> </note>
</sect2> </sect2>
@ -1682,8 +1679,8 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
<para>Some searches can be quite complex, and you may want to <para>Some searches can be quite complex, and you may want to
re-use them later, perhaps with some tweaking. &RCL; versions re-use them later, perhaps with some tweaking. &RCL; versions
1.21 and later can save and restore searches, using XML files. See 1.21 and later can save and restore searches, using XML files. See
<link linkend="RCL.SEARCH.SAVING">Saving and restoring <link linkend="RCL.SEARCH.SAVING">Saving and restoring queries</link>.
queries</link>.</para> </para>
<sect2 id="RCL.SEARCH.GUI.SIMPLE"> <sect2 id="RCL.SEARCH.GUI.SIMPLE">
<title>Simple search</title> <title>Simple search</title>
@ -1712,8 +1709,9 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
for documents where at least one of the terms appear.</para> for documents where at least one of the terms appear.</para>
<para>The <guilabel>Query Language</guilabel> features are <para>The <guilabel>Query Language</guilabel> features are
described in <link linkend="RCL.SEARCH.LANG">a separate described in
section</link>.</para> <link linkend="RCL.SEARCH.LANG">a separate section</link>.
</para>
<para>All search modes allow terms to be expanded with wildcards <para>All search modes allow terms to be expanded with wildcards
characters (<literal>*</literal>, <literal>?</literal>, characters (<literal>*</literal>, <literal>?</literal>,
@ -1760,8 +1758,7 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
a search for <literal>Floor</literal> will only look for a search for <literal>Floor</literal> will only look for
<literal>floor</literal>, in any character case. Stemming can also <literal>floor</literal>, in any character case. Stemming can also
be disabled globally in the preferences. When using a raw index, be disabled globally in the preferences. When using a raw index,
<link linkend="RCL.SEARCH.CASEDIAC">the rules are a bit more <link linkend="RCL.SEARCH.CASEDIAC">the rules are a bit more complicated</link>.</para>
complicated</link>.</para>
<para>&RCL; remembers the last few searches that you performed. You <para>&RCL; remembers the last few searches that you performed. You
can directly access the search history by clicking the clock button can directly access the search history by clicking the clock button
@ -1786,12 +1783,8 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
this mode from the <guilabel>Query Language</guilabel> mode, where this mode from the <guilabel>Query Language</guilabel> mode, where
you have to care about the syntax.</para> you have to care about the syntax.</para>
<para>You can use the <link linkend="RCL.SEARCH.GUI.COMPLEX"> <para>You can use the <link linkend="RCL.SEARCH.GUI.COMPLEX"><menuchoice><guimenu>Tools</guimenu><guimenuitem>Advanced search</guimenuitem></menuchoice></link>
<menuchoice> dialog for more complex searches.</para>
<guimenu>Tools</guimenu>
<guimenuitem>Advanced search</guimenuitem>
</menuchoice>
</link> dialog for more complex searches.</para>
</sect2> </sect2>
@ -1840,9 +1833,8 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
the functionality and use the standard desktop tool.</para> the functionality and use the standard desktop tool.</para>
<para>You may also change the choice of applications by editing the <para>You may also change the choice of applications by editing the
<link linkend="RCL.INSTALL.CONFIG.MIMEVIEW"> <link linkend="RCL.INSTALL.CONFIG.MIMEVIEW"><filename>mimeview</filename></link>
<filename>mimeview</filename></link> configuration file if you find configuration file if you find this more convenient.</para>
this more convenient.</para>
<para>Each result entry also has a right-click menu with an <para>Each result entry also has a right-click menu with an
<guilabel>Open With</guilabel> entry. This lets you choose an <guilabel>Open With</guilabel> entry. This lets you choose an
@ -1854,16 +1846,15 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
&RCL; has no configured way to preview a given file type (which &RCL; has no configured way to preview a given file type (which
was indexed by name only), or no configured external editor for was indexed by name only), or no configured external editor for
the file type. This can sometimes be adjusted simply by tweaking the file type. This can sometimes be adjusted simply by tweaking
the <link linkend="RCL.INSTALL.CONFIG.MIMEMAP"> the <link linkend="RCL.INSTALL.CONFIG.MIMEMAP"><filename>mimemap</filename></link>
<filename>mimemap</filename></link> and and <link linkend="RCL.INSTALL.CONFIG.MIMEVIEW"><filename>mimeview</filename></link>
<link linkend="RCL.INSTALL.CONFIG.MIMEVIEW"> configuration files (the latter can be modified with the user
<filename>mimeview</filename></link> configuration files (the latter preferences dialog).</para>
can be modified with the user preferences dialog).</para>
<para>The format of the result list entries is entirely <para>The format of the result list entries is entirely
configurable by using the preference dialog to configurable by using the preference dialog to
<link linkend="RCL.SEARCH.GUI.CUSTOM.RESLIST">edit an HTML <link linkend="RCL.SEARCH.GUI.CUSTOM.RESLIST">edit an HTML fragment</link>.
fragment</link>.</para> </para>
<para>You can click on the <literal>Query details</literal> link <para>You can click on the <literal>Query details</literal> link
at the top of the results page to see the query actually at the top of the results page to see the query actually
@ -2046,8 +2037,9 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
</para> </para>
<para>The commands defined this way can also be used from links <para>The commands defined this way can also be used from links
inside the <link linkend="RCL.SEARCH.GUI.CUSTOM.RESLIST.PARA"> inside the
result paragraph</link>.</para> <link linkend="RCL.SEARCH.GUI.CUSTOM.RESLIST.PARA">result paragraph</link>.
</para>
<para>As an example, it might make sense to write a script which <para>As an example, it might make sense to write a script which
would move the document to the trash and purge it from the &RCL; would move the document to the trash and purge it from the &RCL;
@ -2268,8 +2260,8 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
toolbar.</para> toolbar.</para>
<para>&RCL; keeps a history of searches. See <para>&RCL; keeps a history of searches. See
<link linkend="RCL.SEARCH.GUI.COMPLEX.HISTORY"> <link linkend="RCL.SEARCH.GUI.COMPLEX.HISTORY">Advanced search history</link>.
Advanced search history</link>.</para> </para>
<para>The dialog has two tabs:</para> <para>The dialog has two tabs:</para>
@ -2514,8 +2506,8 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
<sect2 id="RCL.SEARCH.GUI.MULTIDB"> <sect2 id="RCL.SEARCH.GUI.MULTIDB">
<title>Multiple indexes</title> <title>Multiple indexes</title>
<para>See the <link linkend="RCL.INDEXING.CONFIG.MULTIPLE">section <para>See the section describing
describing the use of multiple indexes</link> for <link linkend="RCL.INDEXING.CONFIG.MULTIPLE">the use of multiple indexes</link> for
generalities. Only the aspects concerning the generalities. Only the aspects concerning the
<command>recoll</command> GUI are described here.</para> <command>recoll</command> GUI are described here.</para>
@ -2645,8 +2637,7 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
<formalpara><title>Wildcards</title> <formalpara><title>Wildcards</title>
<para>Wildcards can be used inside search terms in all forms <para>Wildcards can be used inside search terms in all forms
of searches. <link linkend="RCL.SEARCH.WILDCARDS"> of searches. <link linkend="RCL.SEARCH.WILDCARDS">More about wildcards</link>.
More about wildcards</link>.
</para> </para>
</formalpara> </formalpara>
@ -2744,8 +2735,8 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
<title>Others</title> <title>Others</title>
<formalpara><title>Using fields</title> <formalpara><title>Using fields</title>
<para>You can use the <link linkend="RCL.SEARCH.LANG">query <para>You can use the <link linkend="RCL.SEARCH.LANG">query language </link>
language </link> and field specifications and field specifications
to only search certain parts of documents. This can be to only search certain parts of documents. This can be
especially helpful with email, for example only searching especially helpful with email, for example only searching
emails from a specific originator: emails from a specific originator:
@ -3024,16 +3015,18 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
<listitem id="RCL.SEARCH.GUI.CUSTOM.RESULTPARA"> <listitem id="RCL.SEARCH.GUI.CUSTOM.RESULTPARA">
<para><guilabel>Edit result list paragraph format string</guilabel>: <para><guilabel>Edit result list paragraph format string</guilabel>:
allows you to change the presentation of each result list allows you to change the presentation of each result list
entry. See the <link linkend="RCL.SEARCH.GUI.CUSTOM.RESLIST"> entry. See the
result list customisation section</link>.</para> <link linkend="RCL.SEARCH.GUI.CUSTOM.RESLIST">result list customisation section</link>.
</para>
</listitem> </listitem>
<listitem id="RCL.SEARCH.GUI.CUSTOM.RESULTHEAD"> <listitem id="RCL.SEARCH.GUI.CUSTOM.RESULTHEAD">
<para><guilabel>Edit result page HTML header insert</guilabel>: <para><guilabel>Edit result page HTML header insert</guilabel>:
allows you to define text inserted at the end of the result allows you to define text inserted at the end of the result
page HTML header. page HTML header.
More detail in the <link linkend="RCL.SEARCH.GUI.CUSTOM.RESLIST"> More detail in the
result list customisation section.</link></para> <link linkend="RCL.SEARCH.GUI.CUSTOM.RESLIST">result list customisation section</link>.
</para>
</listitem> </listitem>
<listitem> <listitem>
@ -3153,12 +3146,12 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
<para>Newer versions of Recoll (from 1.17) normally use WebKit HTML <para>Newer versions of Recoll (from 1.17) normally use WebKit HTML
widgets for the result list and the widgets for the result list and the
<link linkend="RCL.SEARCH.GUI.RESULTLIST.MENU.SNIPPETS"> <link linkend="RCL.SEARCH.GUI.RESULTLIST.MENU.SNIPPETS">snippets window</link>
snippets window</link> (this may be disabled at build time). (this may be disabled at build time).
Total customisation is possible with full support for CSS and Total customisation is possible with full support for CSS and
Javascript. Conversely, there are limits to what you can do with Javascript. Conversely, there are limits to what you can do with
the older Qt QTextBrowser, but still, it is possible to decide the older Qt QTextBrowser, but still, it is possible to decide
what data each result will contain, and how it will be what data each result will contain, and how it will be
displayed.</para> displayed.</para>
<para>The result list presentation can be exhaustively customized <para>The result list presentation can be exhaustively customized
@ -3168,8 +3161,8 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
<listitem><para>The paragraph format</para></listitem> <listitem><para>The paragraph format</para></listitem>
<listitem><para>HTML code inside the header section. For <listitem><para>HTML code inside the header section. For
versions 1.21 and later, this is also used for the versions 1.21 and later, this is also used for the
<link linkend="RCL.SEARCH.GUI.RESULTLIST.MENU.SNIPPETS"> <link linkend="RCL.SEARCH.GUI.RESULTLIST.MENU.SNIPPETS">snippets window</link>.
snippets window</link> </para></listitem> </para></listitem>
</itemizedlist> </itemizedlist>
The paragraph format and the header fragment can be edited The paragraph format and the header fragment can be edited
from the <guilabel>Result list</guilabel> tab of the from the <guilabel>Result list</guilabel> tab of the
@ -3202,8 +3195,7 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
<listitem><formalpara><title>%I</title><para>Icon image <listitem><formalpara><title>%I</title><para>Icon image
name. This is normally determined from the MIME type. The name. This is normally determined from the MIME type. The
associations are defined inside the associations are defined inside the
<link linkend="RCL.INSTALL.CONFIG.MIMECONF"> <link linkend="RCL.INSTALL.CONFIG.MIMECONF"><filename>mimeconf</filename> configuration file</link>.
<filename>mimeconf</filename> configuration file</link>.
If a thumbnail for the file is found at If a thumbnail for the file is found at
the standard Freedesktop location, this will be displayed the standard Freedesktop location, this will be displayed
instead.</para></formalpara> instead.</para></formalpara>
@ -3262,8 +3254,7 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
<literal>R%N|<replaceable>scriptname</replaceable></literal> will <literal>R%N|<replaceable>scriptname</replaceable></literal> will
run the corresponding script on the result file (if the document is run the corresponding script on the result file (if the document is
embedded, the script will be started on the top-level parent). embedded, the script will be started on the top-level parent).
See the <link linkend="RCL.SEARCH.GUI.RUNSCRIPT">section about See the <link linkend="RCL.SEARCH.GUI.RUNSCRIPT">section about defining scripts</link>.</para>
defining scripts</link>.</para>
<para>In addition to the predefined values above, all strings <para>In addition to the predefined values above, all strings
like <literal>%(fieldname)</literal> will be replaced by the like <literal>%(fieldname)</literal> will be replaced by the
@ -3271,8 +3262,7 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
document. Only stored fields can be accessed in this way, the document. Only stored fields can be accessed in this way, the
value of indexed but not stored fields is not known at this value of indexed but not stored fields is not known at this
point in the search process point in the search process
(see <link linkend="RCL.PROGRAM.FIELDS">field (see <link linkend="RCL.PROGRAM.FIELDS">field configuration</link>). There are currently very few fields
configuration</link>). There are currently very few fields
stored by default, apart from the values above stored by default, apart from the values above
(only <literal>author</literal> (only <literal>author</literal>
and <literal>filename</literal>), so this feature will need and <literal>filename</literal>), so this feature will need
@ -3317,9 +3307,7 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
site, with pictures to show how they look.</ulink></para> site, with pictures to show how they look.</ulink></para>
<para>It is also possible to <para>It is also possible to
<link linkend="RCL.SEARCH.GUI.CUSTOM.ABSSEP"> <link linkend="RCL.SEARCH.GUI.CUSTOM.ABSSEP">define the value of the snippet separator inside the abstract section</link>.</para>
define the value of the snippet separator inside the abstract
section</link>.</para>
</sect4> </sect4>
</sect3> </sect3>
</sect2> </sect2>
@ -3595,8 +3583,8 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
allowing accesses from the client.</para> allowing accesses from the client.</para>
<para>The translations are defined in the <para>The translations are defined in the
<link linkend="RCL.INSTALL.CONFIG.PTRANS"> <link linkend="RCL.INSTALL.CONFIG.PTRANS"><filename>ptrans</filename></link>
<filename>ptrans</filename></link> configuration file, which configuration file, which
can be edited by hand or from the GUI external indexes can be edited by hand or from the GUI external indexes
configuration dialog: <menuchoice> configuration dialog: <menuchoice>
<guimenu>Preferences</guimenu> <guimenu>Preferences</guimenu>
@ -3699,8 +3687,8 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
Specifying a wild-card on the left of a term can produce a very Specifying a wild-card on the left of a term can produce a very
slow search (or even an incorrect one if the expansion is slow search (or even an incorrect one if the expansion is
truncated because of excessive size). Also see truncated because of excessive size). Also see
<link linkend="RCL.SEARCH.WILDCARDS"> <link linkend="RCL.SEARCH.WILDCARDS">More about wildcards</link>.
More about wildcards</link>.</para> </para>
<para>To save you some typing, recent &RCL; versions (1.20 and later) <para>To save you some typing, recent &RCL; versions (1.20 and later)
interpret a comma-separated list of terms as an AND list inside the interpret a comma-separated list of terms as an AND list inside the
@ -3714,10 +3702,9 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
<para>Modifiers can be set on a double-quote value, for example to specify <para>Modifiers can be set on a double-quote value, for example to specify
a proximity search (unordered). See a proximity search (unordered). See
<link linkend="RCL.SEARCH.LANG.MODIFIERS">the modifier <link linkend="RCL.SEARCH.LANG.MODIFIERS">the modifier section</link>.
section</link>. No space must separate the final No space must separate the final double-quote and the modifiers
double-quote and the modifiers value, e.g. <replaceable>"two value, e.g. <replaceable>"two one"po10</replaceable></para>
one"po10</replaceable></para>
<para>&RCL; currently manages the following default fields:</para> <para>&RCL; currently manages the following default fields:</para>
@ -3774,8 +3761,8 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
<literal>filename</literal> to <replaceable>fn</replaceable> or <literal>filename</literal> to <replaceable>fn</replaceable> or
<literal>containerfilename</literal> to <literal>containerfilename</literal> to
<replaceable>cfn</replaceable>. See the <replaceable>cfn</replaceable>. See the
<link linkend="RCL.INSTALL.CONFIG.FIELDS">section about the <link linkend="RCL.INSTALL.CONFIG.FIELDS">section about the <filename>fields</filename> file</link>.
<filename>fields</filename> file</link></para> </para>
<para>The document input handlers used while indexing have the <para>The document input handlers used while indexing have the
possibility to create other fields with arbitrary names, and possibility to create other fields with arbitrary names, and
@ -3796,9 +3783,9 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
(release >= 1.15.8). Tilde expansion will be performed as (release >= 1.15.8). Tilde expansion will be performed as
usual (except for a bug in versions 1.19 to usual (except for a bug in versions 1.19 to
1.19.11p1). Wildcards will be expanded, but 1.19.11p1). Wildcards will be expanded, but
please <link linkend="RCL.SEARCH.WILDCARDS.PATH"> have a please
look</link> at an important limitation of wildcards in <link linkend="RCL.SEARCH.WILDCARDS.PATH"> have a look</link>
path filters.</para> at an important limitation of wildcards in path filters.</para>
<para>Relative paths also make sense, for example, <para>Relative paths also make sense, for example,
<literal>dir:share/doc</literal> would match either <literal>dir:share/doc</literal> would match either
@ -3943,10 +3930,9 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
possibly open-ended interval.</para> possibly open-ended interval.</para>
<para>See the section about the <para>See the section about the
<link linkend="RCL.INSTALL.CONFIG.FIELDS"> <link linkend="RCL.INSTALL.CONFIG.FIELDS"><filename>fields</filename> configuration file</link>
<filename>fields</filename> configuration file</link> for the for the details of configuring a field for range searches (list
details of configuring a field for range searches (list them in the them in the [values] section).</para>
[values] section).</para>
</sect2> </sect2>
@ -4129,8 +4115,8 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
<listitem><para>Using a <literal>*</literal> at the end of a <listitem><para>Using a <literal>*</literal> at the end of a
word can produce more matches than you would think, and word can produce more matches than you would think, and
strange search results. You can use the strange search results. You can use the
<link linkend="RCL.SEARCH.GUI.TERMEXPLORER">term <link linkend="RCL.SEARCH.GUI.TERMEXPLORER">term explorer</link>
explorer</link> tool to check what completions exist for tool to check what completions exist for
a given term. You can also see exactly what search was a given term. You can also see exactly what search was
performed by clicking on the link at the top of the result performed by clicking on the link at the top of the result
list. In general, for natural language terms, stem list. In general, for natural language terms, stem
@ -4213,8 +4199,7 @@ recoll -c <replaceable>/path/to/my/new/config</replaceable></programlisting>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para>The <application>KDE</application> KIO Slave was <para>The <application>KDE</application> KIO Slave was
described in a <link linkend="RCL.SEARCH.KIO">previous described in a <link linkend="RCL.SEARCH.KIO">previous section</link>.</para>
section</link>.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>If you use a recent version of Ubuntu Linux, you may <para>If you use a recent version of Ubuntu Linux, you may
@ -4395,8 +4380,8 @@ recollindex -c "$confdir"
<para>If, after the move, the configuration directory needs to be <para>If, after the move, the configuration directory needs to be
copied out of the dataset (for example because the thumb drive is too copied out of the dataset (for example because the thumb drive is too
slow), you can set the slow), you can set the
<link linkend="RCL.INSTALL.CONFIG.RECOLLCONF.CURIDXCONFDIR"> <link linkend="RCL.INSTALL.CONFIG.RECOLLCONF.CURIDXCONFDIR">curidxconfdir</link>,
curidxconfdir</link>, variable inside the copied configuration to variable inside the copied configuration to
define the location of the moved one. For example if define the location of the moved one. For example if
<filename>/home/me/mydata</filename> is now mounted onto <filename>/home/me/mydata</filename> is now mounted onto
<filename>/media/me/somelabel</filename>, but the configuration <filename>/media/me/somelabel</filename>, but the configuration
@ -4523,9 +4508,8 @@ recollindex -c "$confdir"
format can return an arbitrary amount of metadata inside HTML format can return an arbitrary amount of metadata inside HTML
<literal>meta</literal> tags. These will be processed <literal>meta</literal> tags. These will be processed
according to the directives found in according to the directives found in
the <link linkend="RCL.PROGRAM.FIELDS"> the <link linkend="RCL.PROGRAM.FIELDS"><filename>fields</filename> configuration file</link>.
<filename>fields</filename> configuration </para>
file</link>.</para>
<para>The handlers that can handle multiple documents per file <para>The handlers that can handle multiple documents per file
return a single piece of data to identify each document inside return a single piece of data to identify each document inside
@ -4563,9 +4547,9 @@ recollindex -c "$confdir"
to add metadata or vary the output character encoding (this will be to add metadata or vary the output character encoding (this will be
defined in a configuration file). Additionally, some formatting may defined in a configuration file). Additionally, some formatting may
be easier to preserve when previewing HTML. Actually the deciding factor be easier to preserve when previewing HTML. Actually the deciding factor
is metadata: &RCL; has a way to <link linkend="RCL.PROGRAM.FILTERS.HTML"> is metadata: &RCL; has a way to
extract metadata from the HTML header and use it for field <link linkend="RCL.PROGRAM.FILTERS.HTML">extract metadata from the HTML header and use it for field searches.</link>.
searches.</link>.</para> </para>
<para>The <envar>RECOLL_FILTER_FORPREVIEW</envar> environment <para>The <envar>RECOLL_FILTER_FORPREVIEW</envar> environment
variable (values <literal>yes</literal>, <literal>no</literal>) variable (values <literal>yes</literal>, <literal>no</literal>)
@ -4682,8 +4666,8 @@ recollindex -c "$confdir"
<para>The association of files to MIME types is mostly based on <para>The association of files to MIME types is mostly based on
name suffixes. The types are defined inside the name suffixes. The types are defined inside the
<link linkend="RCL.INSTALL.CONFIG.MIMEMAP"> <link linkend="RCL.INSTALL.CONFIG.MIMEMAP"><filename>mimemap</filename> file</link>.
<filename>mimemap</filename> file</link>. Example: Example:
<programlisting> <programlisting>
.doc = application/msword .doc = application/msword
@ -4693,9 +4677,8 @@ recollindex -c "$confdir"
<command>xdg-mime</command>) to determine a MIME type.</para> <command>xdg-mime</command>) to determine a MIME type.</para>
<para>The second element is the association of MIME types to handlers <para>The second element is the association of MIME types to handlers
in the <link linkend="RCL.INSTALL.CONFIG.MIMECONF"> in the <link linkend="RCL.INSTALL.CONFIG.MIMECONF"><filename>mimeconf</filename> file</link>.
<filename>mimeconf</filename> file</link>. A sample will probably be A sample will probably be better than a long explanation:</para>
better than a long explanation:</para>
<programlisting> <programlisting>
[index] [index]
@ -4798,8 +4781,7 @@ recollindex -c "$confdir"
the header as possible document fields candidates. Documents the header as possible document fields candidates. Documents
fields can be processed by the indexer in different ways, fields can be processed by the indexer in different ways,
for searching or displaying inside query results. This is for searching or displaying inside query results. This is
described in a <link linkend="RCL.PROGRAM.FIELDS">following described in a <link linkend="RCL.PROGRAM.FIELDS">following section.</link>
section.</link>
</para> </para>
<para>By default, the indexer will process the standard header <para>By default, the indexer will process the standard header
@ -4843,8 +4825,7 @@ recollindex -c "$confdir"
</programlisting> </programlisting>
<para>As written above, the processing of fields is described <para>As written above, the processing of fields is described
in a <link linkend="RCL.PROGRAM.FIELDS">further in a <link linkend="RCL.PROGRAM.FIELDS">further section</link>.</para>
section</link>.</para>
<para>Persistent filters can use another, probably simpler, <para>Persistent filters can use another, probably simpler,
@ -4913,8 +4894,7 @@ recollindex -c "$confdir"
<para>Some fields may also designated as supporting range queries, <para>Some fields may also designated as supporting range queries,
meaning that the results may be selected for an interval of its meaning that the results may be selected for an interval of its
values. See the <link linkend="RCL.INSTALL.CONFIG.FIELDS"> values. See the <link linkend="RCL.INSTALL.CONFIG.FIELDS">configuration section</link> for more details.</para>
configuration section</link> for more details.</para>
<para>The sequence of events for field processing is as follows: <para>The sequence of events for field processing is as follows:
<itemizedlist> <itemizedlist>
@ -4943,8 +4923,8 @@ recollindex -c "$confdir"
<listitem><para>At query time, the field can be displayed inside <listitem><para>At query time, the field can be displayed inside
the result list by using the appropriate directive in the the result list by using the appropriate directive in the
definition of the definition of the
<link linkend="RCL.SEARCH.GUI.CUSTOM.RESLIST">result list paragraph <link linkend="RCL.SEARCH.GUI.CUSTOM.RESLIST">result list paragraph format</link>.
format</link>. All fields are displayed on the fields screen of All fields are displayed on the fields screen of
the preview window (which you can reach through the right-click the preview window (which you can reach through the right-click
menu). This is independant of the fact that the search which menu). This is independant of the fact that the search which
produced the results used the field or not.</para> produced the results used the field or not.</para>
@ -4953,9 +4933,8 @@ recollindex -c "$confdir"
</para> </para>
<para>You can find more information in the <para>You can find more information in the
<link linkend="RCL.INSTALL.CONFIG.FIELDS">section about the <link linkend="RCL.INSTALL.CONFIG.FIELDS">section about the <filename>fields</filename> file</link>,
<filename>fields</filename> file</link>, or in comments inside the or in comments inside the file.</para>
file.</para>
<para>You can also have a look at the <para>You can also have a look at the
<ulink url="&FAQS;HandleCustomField">example in the FAQs area</ulink>, <ulink url="&FAQS;HandleCustomField">example in the FAQs area</ulink>,
@ -5020,8 +4999,7 @@ recollindex -c "$confdir"
<para>There is a good chance that your system repository has <para>There is a good chance that your system repository has
packages for the Recoll Python API, sometimes in a package separate packages for the Recoll Python API, sometimes in a package separate
from the main one (maybe named something like python-recoll). Else from the main one (maybe named something like python-recoll). Else
refer to the <link linkend="RCL.INSTALL.BUILDING">Building from refer to the <link linkend="RCL.INSTALL.BUILDING">Building from source chapter</link>.</para>
source chapter</link>.</para>
<para>As an introduction, the following small sample will run a <para>As an introduction, the following small sample will run a
query and list the title and url for each of the results. It would query and list the title and url for each of the results. It would
@ -5128,8 +5106,8 @@ recollindex -c "$confdir"
<varlistentry> <varlistentry>
<term>Stored and indexed fields</term> <term>Stored and indexed fields</term>
<listitem><para>The <listitem><para>The
<link linkend="RCL.INSTALL.CONFIG.FIELDS"><filename>fields</filename> <link linkend="RCL.INSTALL.CONFIG.FIELDS"><filename>fields</filename> file</link>
file</link> inside the &RCL; configuration defines which inside the &RCL; configuration defines which
document fields are either <literal>indexed</literal> document fields are either <literal>indexed</literal>
(searchable), <literal>stored</literal> (retrievable with (searchable), <literal>stored</literal> (retrievable with
search results), or both. Apart from a few standard/internal search results), or both. Apart from a few standard/internal
@ -6871,8 +6849,9 @@ other = rclcat:other
<para><filename>ptrans</filename> specifies query-time path <para><filename>ptrans</filename> specifies query-time path
translations. These can be useful translations. These can be useful
in <link linkend="RCL.SEARCH.PTRANS">multiple in <link linkend="RCL.SEARCH.PTRANS">multiple cases</link>.
cases</link>.</para> </para>
<para>The file has a section for any index which needs <para>The file has a section for any index which needs
translations, either the main one or additional query translations, either the main one or additional query
indexes. The sections are named with the &XAP; index indexes. The sections are named with the &XAP; index
@ -6980,9 +6959,8 @@ application/x-blobapp = internal text/plain</programlisting>
will be given a file name as argument and should output the will be given a file name as argument and should output the
text or html contents on the standard output.</para> text or html contents on the standard output.</para>
<para>The <link linkend="RCL.PROGRAM.FILTERS">filter <para>The <link linkend="RCL.PROGRAM.FILTERS">filter programming</link>
programming</link> section describes in more detail how section describes in more detail how to write an input handler.</para>
to write an input handler.</para>
</sect3> </sect3>