Initial commit of automatic indexing tool.
[SVN r49852]
73
doc/Jamfile.v2
Normal file
@ -0,0 +1,73 @@
|
||||
# Copyright John Maddock 2005. Use, modification, and distribution are
|
||||
# subject to the Boost Software License, Version 1.0. (See accompanying
|
||||
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
using quickbook ;
|
||||
|
||||
path-constant images_location : html ;
|
||||
|
||||
xml auto_index : auto_index.qbk ;
|
||||
boostbook standalone
|
||||
:
|
||||
auto_index
|
||||
:
|
||||
# Path for links to Boost:
|
||||
#<xsl:param>boost.root=../../../../../../../trunk
|
||||
# Path for libraries index:
|
||||
<xsl:param>boost.libraries=$(boost-root)/libs/libraries.htm
|
||||
# Use the main Boost stylesheet:
|
||||
<xsl:param>html.stylesheet=boostbook.css
|
||||
|
||||
# Some general style settings:
|
||||
<xsl:param>table.footnote.number.format=1
|
||||
<xsl:param>footnote.number.format=1
|
||||
|
||||
# HTML options first:
|
||||
# Use graphics not text for navigation:
|
||||
<xsl:param>navig.graphics=1
|
||||
# How far down we chunk nested sections, basically all of them:
|
||||
<xsl:param>chunk.section.depth=10
|
||||
# Don't put the first section on the same page as the TOC:
|
||||
<xsl:param>chunk.first.sections=1
|
||||
# How far down sections get TOC's
|
||||
<xsl:param>toc.section.depth=10
|
||||
# Max depth in each TOC:
|
||||
<xsl:param>toc.max.depth=4
|
||||
# How far down we go with TOC's
|
||||
<xsl:param>generate.section.toc.level=10
|
||||
# Index on type:
|
||||
<xsl:param>index.on.type=1
|
||||
|
||||
#<xsl:param>root.filename="sf_dist_and_tools"
|
||||
#<xsl:param>graphicsize.extension=1
|
||||
#<xsl:param>use.extensions=1
|
||||
|
||||
# PDF Options:
|
||||
# TOC Generation: this is needed for FOP-0.9 and later:
|
||||
<xsl:param>fop1.extensions=0
|
||||
<format>pdf:<xsl:param>xep.extensions=1
|
||||
# TOC generation: this is needed for FOP 0.2, but must not be set to zero for FOP-0.9!
|
||||
<format>pdf:<xsl:param>fop.extensions=0
|
||||
# No indent on body text:
|
||||
<format>pdf:<xsl:param>body.start.indent=0pt
|
||||
# Margin size:
|
||||
<format>pdf:<xsl:param>page.margin.inner=0.5in
|
||||
# Margin size:
|
||||
<format>pdf:<xsl:param>page.margin.outer=0.5in
|
||||
# Paper type = A4
|
||||
<format>pdf:<xsl:param>paper.type=A4
|
||||
# Yes, we want graphics for admonishments:
|
||||
<xsl:param>admon.graphics=1
|
||||
# Set this one for PDF generation *only*:
|
||||
# default pnd graphics are awful in PDF form,
|
||||
# better use SVG's instead:
|
||||
<format>pdf:<xsl:param>admon.graphics.extension=".svg"
|
||||
<format>pdf:<xsl:param>use.role.for.mediaobject=1
|
||||
<format>pdf:<xsl:param>preferred.mediaobject.role=print
|
||||
<format>pdf:<xsl:param>img.src.path=$(images_location)/
|
||||
<format>pdf:<xsl:param>admon.graphics.path=$(images_location)/images/
|
||||
<format>pdf:<xsl:param>draft.mode="no"
|
||||
;
|
||||
|
||||
|
||||
|
77
doc/auto_index.qbk
Normal file
@ -0,0 +1,77 @@
|
||||
[article AutoIndex
|
||||
[quickbook 1.4]
|
||||
[copyright 2008 John Maddock]
|
||||
[license
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENSE_1_0.txt or copy at
|
||||
[@http://www.boost.org/LICENSE_1_0.txt])
|
||||
]
|
||||
[authors [Maddock, John]]
|
||||
[/last-revision $Date: 2008-11-04 17:11:53 +0000 (Tue, 04 Nov 2008) $]
|
||||
]
|
||||
|
||||
[section:overview Overview]
|
||||
|
||||
AutoIndex is a tool for taking the grunt work out of indexing a
|
||||
Quickbook\/Boostbook\/Docbook document that describes C/C++ code.
|
||||
|
||||
Traditionally, in order to index a Docbook document you would
|
||||
have to manually add a large amount of `<indexterm>` markup:
|
||||
in fact one `<indexterm>` for each occurance of each term to be
|
||||
indexed.
|
||||
|
||||
Instead AutoIndex will scan one or more C/C++ header files
|
||||
and extract all the ['function], ['class], ['macro] and ['typedef]
|
||||
names that are defined by those headers, and then insert the
|
||||
`<indexterm>`'s into the XML document for you.
|
||||
|
||||
AutoIndex creates index entries as follows - for each occurance of
|
||||
each search term, it creates two index entries - one has the search term
|
||||
as the primary index key and the title of the section it appears in as
|
||||
a subterm, the other has the section title as the main index entry and the
|
||||
search term as the subentry. Thus the user has two chances to find what their
|
||||
looking for, based upon either the section name or the ['function], ['class], ['macro]
|
||||
or ['typedef] name.
|
||||
|
||||
So for example in Boost.Math the class name `students_t_distribution` has a primary
|
||||
entry that lists all sections it appears in:
|
||||
|
||||
[$../students_t_eg_1.png]
|
||||
|
||||
Then those sections also have primary entries, which list all the search terms those
|
||||
sections contain:
|
||||
|
||||
[$../students_t_eg_2.png]
|
||||
|
||||
Of course these automated index entries may not be quite
|
||||
what you're looking for: often you'll get a few spurious entries, a few missing entries,
|
||||
and a few entries where the section name used as an index entry is less than ideal.
|
||||
So AutoIndex provides some powerful regular expression based rules that allow you
|
||||
to add, remove, constrain, or rewrite entries. Normally just a few lines in
|
||||
AutoIndex's script file are enough to tailor the output to match the authors
|
||||
expectations.
|
||||
|
||||
AutoIndex also supports multiple indexes (as does Docbook), and since it knows
|
||||
which search terms are ['function], ['class], ['macro] or ['typedef] names, it
|
||||
can add the necessary attritubes to the XML so that you can have separate
|
||||
indexes for each of these different types. These specialised indexes only contain
|
||||
entries for the ['function], ['class], ['macro] or ['typedef] names, ['section
|
||||
names] are never used as primary index terms here, unlike the main "include everything"
|
||||
index.
|
||||
|
||||
Finally, while the Docbook XSL stylesheets create nice indexes complete with page
|
||||
numbers for PDF output, the HTML indexes look a lot less good, as these use
|
||||
section titles in place of page numbers... but as AutoIndex uses section titles
|
||||
as index entries this leads to a lot of repetition, so as an alternative AutoIndex
|
||||
can be instructed to construct the index itself. This is faster than using
|
||||
the XSL stylesheets, and now each index entry is a hyperlink to the
|
||||
approprate section:
|
||||
|
||||
[$../students_t_eg_3.png]
|
||||
|
||||
With internal index generation there is also a helpful navigation bar
|
||||
at the start of each Index:
|
||||
|
||||
[$../students_t_eg_4.png]
|
||||
|
||||
[endsect]
|
116
doc/html/autoindex/overview.html
Normal file
@ -0,0 +1,116 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>Overview</title>
|
||||
<link rel="stylesheet" href="../boostbook.css" type="text/css">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot_8125">
|
||||
<link rel="home" href="../index.html" title="AutoIndex">
|
||||
<link rel="up" href="../index.html" title="AutoIndex">
|
||||
<link rel="prev" href="../index.html" title="AutoIndex">
|
||||
</head>
|
||||
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
|
||||
<table cellpadding="2" width="100%"><tr>
|
||||
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
|
||||
<td align="center"><a href="../../../index.html">Home</a></td>
|
||||
<td align="center"><a href="../libraries.html">Libraries</a></td>
|
||||
<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
|
||||
<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
|
||||
<td align="center"><a href="../../../more/index.htm">More</a></td>
|
||||
</tr></table>
|
||||
<hr>
|
||||
<div class="spirit-nav">
|
||||
<a accesskey="p" href="../index.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a>
|
||||
</div>
|
||||
<div class="section" lang="en">
|
||||
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
|
||||
<a name="autoindex.overview"></a><a class="link" href="overview.html" title="Overview"> Overview</a>
|
||||
</h2></div></div></div>
|
||||
<p>
|
||||
AutoIndex is a tool for taking the grunt work out of indexing a Quickbook/Boostbook/Docbook
|
||||
document that describes C/C++ code.
|
||||
</p>
|
||||
<p>
|
||||
Traditionally, in order to index a Docbook document you would have to manually
|
||||
add a large amount of <code class="computeroutput"><span class="special"><</span><span class="identifier">indexterm</span><span class="special">></span></code> markup: in fact one <code class="computeroutput"><span class="special"><</span><span class="identifier">indexterm</span><span class="special">></span></code>
|
||||
for each occurance of each term to be indexed.
|
||||
</p>
|
||||
<p>
|
||||
Instead AutoIndex will scan one or more C/C++ header files and extract all
|
||||
the <span class="emphasis"><em>function</em></span>, <span class="emphasis"><em>class</em></span>, <span class="emphasis"><em>macro</em></span>
|
||||
and <span class="emphasis"><em>typedef</em></span> names that are defined by those headers, and
|
||||
then insert the <code class="computeroutput"><span class="special"><</span><span class="identifier">indexterm</span><span class="special">></span></code>'s into the XML document for you.
|
||||
</p>
|
||||
<p>
|
||||
AutoIndex creates index entries as follows - for each occurance of each search
|
||||
term, it creates two index entries - one has the search term as the primary
|
||||
index key and the title of the section it appears in as a subterm, the other
|
||||
has the section title as the main index entry and the search term as the subentry.
|
||||
Thus the user has two chances to find what their looking for, based upon either
|
||||
the section name or the <span class="emphasis"><em>function</em></span>, <span class="emphasis"><em>class</em></span>,
|
||||
<span class="emphasis"><em>macro</em></span> or <span class="emphasis"><em>typedef</em></span> name.
|
||||
</p>
|
||||
<p>
|
||||
So for example in Boost.Math the class name <code class="computeroutput"><span class="identifier">students_t_distribution</span></code>
|
||||
has a primary entry that lists all sections it appears in:
|
||||
</p>
|
||||
<p>
|
||||
<span class="inlinemediaobject"><img src="../../students_t_eg_1.png" alt="students_t_eg_1"></span>
|
||||
</p>
|
||||
<p>
|
||||
Then those sections also have primary entries, which list all the search terms
|
||||
those sections contain:
|
||||
</p>
|
||||
<p>
|
||||
<span class="inlinemediaobject"><img src="../../students_t_eg_2.png" alt="students_t_eg_2"></span>
|
||||
</p>
|
||||
<p>
|
||||
Of course these automated index entries may not be quite what you're looking
|
||||
for: often you'll get a few spurious entries, a few missing entries, and a
|
||||
few entries where the section name used as an index entry is less than ideal.
|
||||
So AutoIndex provides some powerful regular expression based rules that allow
|
||||
you to add, remove, constrain, or rewrite entries.
|
||||
</p>
|
||||
<p>
|
||||
AutoIndex also supports multiple indexes (as does Docbook), and since it knows
|
||||
which search terms are <span class="emphasis"><em>function</em></span>, <span class="emphasis"><em>class</em></span>,
|
||||
<span class="emphasis"><em>macro</em></span> or <span class="emphasis"><em>typedef</em></span> names, it can add
|
||||
the necessary attritubes to the XML so that you can have separate indexes for
|
||||
each of these different types. These specialised indexes only contain entries
|
||||
for the <span class="emphasis"><em>function</em></span>, <span class="emphasis"><em>class</em></span>, <span class="emphasis"><em>macro</em></span>
|
||||
or <span class="emphasis"><em>typedef</em></span> names, <span class="emphasis"><em>section names</em></span> are
|
||||
never used as primary index terms here, unlike the main "include everything"
|
||||
index.
|
||||
</p>
|
||||
<p>
|
||||
Finally, while the Docbook XSL stylesheets create nice indexes complete with
|
||||
page numbers for PDF output, the HTML indexes look a lot less good, as these
|
||||
use section titles in place of page numbers... but as AutoIndex uses section
|
||||
titles as index entries this leads to a lot of repetition, so as an alternative
|
||||
AutoIndex can be instructed to construct the index itself. This is faster than
|
||||
using the XSL stylesheets, and now each index entry is a hyperlink to the approprate
|
||||
section:
|
||||
</p>
|
||||
<p>
|
||||
<span class="inlinemediaobject"><img src="../../students_t_eg_3.png" alt="students_t_eg_3"></span>
|
||||
</p>
|
||||
<p>
|
||||
There is also a navigation bar at the start of each Index:
|
||||
</p>
|
||||
<p>
|
||||
<span class="inlinemediaobject"><img src="../../students_t_eg_4.png" alt="students_t_eg_4"></span>
|
||||
</p>
|
||||
</div>
|
||||
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
|
||||
<td align="left"></td>
|
||||
<td align="right"><div class="copyright-footer">Copyright © 2008 John Maddock<p>
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
|
||||
</p>
|
||||
</div></td>
|
||||
</tr></table>
|
||||
<hr>
|
||||
<div class="spirit-nav">
|
||||
<a accesskey="p" href="../index.html"><img src="../../../doc/html/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../doc/html/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/html/images/home.png" alt="Home"></a>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
538
doc/html/boostbook.css
Normal file
@ -0,0 +1,538 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2004 Joel de Guzman
|
||||
http://spirit.sourceforge.net/
|
||||
|
||||
Use, modification and distribution is subject to the Boost Software
|
||||
License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
||||
http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
New syntax color Paul A. Bristow 8 Jun 2007
|
||||
=============================================================================*/
|
||||
|
||||
/*=============================================================================
|
||||
Body defaults
|
||||
=============================================================================*/
|
||||
|
||||
body
|
||||
{
|
||||
margin: 1em;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
|
||||
/*=============================================================================
|
||||
Paragraphs
|
||||
=============================================================================*/
|
||||
|
||||
p
|
||||
{
|
||||
text-align: left;
|
||||
font-size: 10pt;
|
||||
line-height: 1.15;
|
||||
}
|
||||
|
||||
/*=============================================================================
|
||||
Program listings
|
||||
=============================================================================*/
|
||||
|
||||
/* Code on paragraphs */
|
||||
p tt.computeroutput
|
||||
{
|
||||
font-size: 9pt;
|
||||
}
|
||||
|
||||
pre.synopsis
|
||||
{
|
||||
font-size: 90%;
|
||||
margin: 1pc 4% 0pc 4%;
|
||||
padding: 0.5pc 0.5pc 0.5pc 0.5pc;
|
||||
}
|
||||
|
||||
.programlisting,
|
||||
.screen
|
||||
{
|
||||
font-size: 9pt;
|
||||
display: block;
|
||||
margin: 1pc 4% 0pc 4%;
|
||||
padding: 0.5pc 0.5pc 0.5pc 0.5pc;
|
||||
}
|
||||
|
||||
/* Program listings in tables don't get borders */
|
||||
td .programlisting,
|
||||
td .screen
|
||||
{
|
||||
margin: 0pc 0pc 0pc 0pc;
|
||||
padding: 0pc 0pc 0pc 0pc;
|
||||
}
|
||||
|
||||
/*=============================================================================
|
||||
Headings
|
||||
=============================================================================*/
|
||||
|
||||
h1, h2, h3, h4, h5, h6
|
||||
{
|
||||
text-align: left;
|
||||
margin: 1em 0em 0.5em 0em;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
h1 { font: 140% }
|
||||
h2 { font: bold 140% }
|
||||
h3 { font: bold 130% }
|
||||
h4 { font: bold 120% }
|
||||
h5 { font: italic 110% }
|
||||
h6 { font: italic 100% }
|
||||
|
||||
/* Top page titles */
|
||||
title,
|
||||
h1.title,
|
||||
h2.title
|
||||
h3.title,
|
||||
h4.title,
|
||||
h5.title,
|
||||
h6.title,
|
||||
.refentrytitle
|
||||
{
|
||||
font-weight: bold;
|
||||
margin-bottom: 1pc;
|
||||
}
|
||||
|
||||
h1.title { font-size: 140% }
|
||||
h2.title { font-size: 140% }
|
||||
h3.title { font-size: 130% }
|
||||
h4.title { font-size: 120% }
|
||||
h5.title { font-size: 110% }
|
||||
h6.title { font-size: 100% }
|
||||
|
||||
.section h1
|
||||
{
|
||||
margin: 0em 0em 0.5em 0em;
|
||||
font-size: 140%;
|
||||
}
|
||||
|
||||
.section h2 { font-size: 140% }
|
||||
.section h3 { font-size: 130% }
|
||||
.section h4 { font-size: 120% }
|
||||
.section h5 { font-size: 110% }
|
||||
.section h6 { font-size: 100% }
|
||||
|
||||
/* Code on titles */
|
||||
h1 tt.computeroutput { font-size: 140% }
|
||||
h2 tt.computeroutput { font-size: 140% }
|
||||
h3 tt.computeroutput { font-size: 130% }
|
||||
h4 tt.computeroutput { font-size: 120% }
|
||||
h5 tt.computeroutput { font-size: 110% }
|
||||
h6 tt.computeroutput { font-size: 100% }
|
||||
|
||||
/*=============================================================================
|
||||
Author
|
||||
=============================================================================*/
|
||||
|
||||
h3.author
|
||||
{
|
||||
font-size: 100%
|
||||
}
|
||||
|
||||
/*=============================================================================
|
||||
Lists
|
||||
=============================================================================*/
|
||||
|
||||
li
|
||||
{
|
||||
font-size: 10pt;
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
/* Unordered lists */
|
||||
ul
|
||||
{
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
/* Ordered lists */
|
||||
ol
|
||||
{
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
/*=============================================================================
|
||||
Links
|
||||
=============================================================================*/
|
||||
|
||||
a
|
||||
{
|
||||
text-decoration: none; /* no underline */
|
||||
}
|
||||
|
||||
a:hover
|
||||
{
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/*=============================================================================
|
||||
Spirit style navigation
|
||||
=============================================================================*/
|
||||
|
||||
.spirit-nav
|
||||
{
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.spirit-nav a
|
||||
{
|
||||
color: white;
|
||||
padding-left: 0.5em;
|
||||
}
|
||||
|
||||
.spirit-nav img
|
||||
{
|
||||
border-width: 0px;
|
||||
}
|
||||
|
||||
/*=============================================================================
|
||||
Table of contents
|
||||
=============================================================================*/
|
||||
|
||||
.toc
|
||||
{
|
||||
margin: 1pc 4% 0pc 4%;
|
||||
padding: 0.1pc 1pc 0.1pc 1pc;
|
||||
font-size: 80%;
|
||||
line-height: 1.15;
|
||||
}
|
||||
|
||||
.boost-toc
|
||||
{
|
||||
float: right;
|
||||
padding: 0.5pc;
|
||||
}
|
||||
|
||||
/*=============================================================================
|
||||
Tables
|
||||
=============================================================================*/
|
||||
|
||||
.table-title,
|
||||
div.table p.title
|
||||
{
|
||||
margin-left: 4%;
|
||||
padding-right: 0.5em;
|
||||
padding-left: 0.5em;
|
||||
}
|
||||
|
||||
.informaltable table,
|
||||
.table table
|
||||
{
|
||||
width: 92%;
|
||||
margin-left: 4%;
|
||||
margin-right: 4%;
|
||||
}
|
||||
|
||||
div.informaltable table,
|
||||
div.table table
|
||||
{
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
/* Table Cells */
|
||||
div.informaltable table tr td,
|
||||
div.table table tr td
|
||||
{
|
||||
padding: 0.5em;
|
||||
text-align: left;
|
||||
font-size: 9pt;
|
||||
}
|
||||
|
||||
div.informaltable table tr th,
|
||||
div.table table tr th
|
||||
{
|
||||
padding: 0.5em 0.5em 0.5em 0.5em;
|
||||
border: 1pt solid white;
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
/*=============================================================================
|
||||
Blurbs
|
||||
=============================================================================*/
|
||||
|
||||
div.note,
|
||||
div.tip,
|
||||
div.important,
|
||||
div.caution,
|
||||
div.warning,
|
||||
p.blurb
|
||||
{
|
||||
font-size: 9pt; /* A little bit smaller than the main text */
|
||||
line-height: 1.2;
|
||||
display: block;
|
||||
margin: 1pc 4% 0pc 4%;
|
||||
padding: 0.5pc 0.5pc 0.5pc 0.5pc;
|
||||
}
|
||||
|
||||
p.blurb img
|
||||
{
|
||||
padding: 1pt;
|
||||
}
|
||||
|
||||
/*=============================================================================
|
||||
Variable Lists
|
||||
=============================================================================*/
|
||||
|
||||
/* Make the terms in definition lists bold */
|
||||
div.variablelist dl dt,
|
||||
span.term
|
||||
{
|
||||
font-weight: bold;
|
||||
font-size: 10pt;
|
||||
}
|
||||
|
||||
div.variablelist table tbody tr td
|
||||
{
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
padding: 0em 2em 0em 0em;
|
||||
font-size: 10pt;
|
||||
margin: 0em 0em 0.5em 0em;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
div.variablelist dl dt
|
||||
{
|
||||
margin-bottom: 0.2em;
|
||||
}
|
||||
|
||||
div.variablelist dl dd
|
||||
{
|
||||
margin: 0em 0em 0.5em 2em;
|
||||
font-size: 10pt;
|
||||
}
|
||||
|
||||
div.variablelist table tbody tr td p,
|
||||
div.variablelist dl dd p
|
||||
{
|
||||
margin: 0em 0em 0.5em 0em;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
/*=============================================================================
|
||||
Misc
|
||||
=============================================================================*/
|
||||
|
||||
/* Title of books and articles in bibliographies */
|
||||
span.title
|
||||
{
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
span.underline
|
||||
{
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
span.strikethrough
|
||||
{
|
||||
text-decoration: line-through;
|
||||
}
|
||||
|
||||
/* Copyright, Legal Notice */
|
||||
div div.legalnotice p
|
||||
{
|
||||
text-align: left
|
||||
}
|
||||
|
||||
/*=============================================================================
|
||||
Colors
|
||||
=============================================================================*/
|
||||
|
||||
@media screen
|
||||
{
|
||||
/* Links */
|
||||
a
|
||||
{
|
||||
color: #005a9c;
|
||||
}
|
||||
|
||||
a:visited
|
||||
{
|
||||
color: #9c5a9c;
|
||||
}
|
||||
|
||||
h1 a, h2 a, h3 a, h4 a, h5 a, h6 a,
|
||||
h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover, h6 a:hover,
|
||||
h1 a:visited, h2 a:visited, h3 a:visited, h4 a:visited, h5 a:visited, h6 a:visited
|
||||
{
|
||||
text-decoration: none; /* no underline */
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
/* New Syntax Highlighting
|
||||
using Recognized color keyword names, for example:
|
||||
http://www.w3.org/TR/SVG/types.html see section 4.2
|
||||
*/
|
||||
.keyword { color: blue; }
|
||||
.identifier { color: black; }
|
||||
.special { color: magenta; }
|
||||
.preprocessor { color: blueviolet; }
|
||||
.char { color: teal; }
|
||||
.comment { color: green; }
|
||||
.string { color: teal; }
|
||||
.number { color: red; }
|
||||
.white_bkd { background-color: white; }
|
||||
.dk_grey_bkd { background-color: dimgray; }
|
||||
|
||||
/* Original Syntax Highlighting
|
||||
.keyword { color: blue; }
|
||||
.identifier { color: #000000; }
|
||||
.special { color: #707070; }
|
||||
.preprocessor { color: #402080; }
|
||||
.char { color: teal; }
|
||||
.comment { color: #800000; }
|
||||
.string { color: teal; }
|
||||
.number { color: teal; }
|
||||
.white_bkd { background-color: #FFFFFF; }
|
||||
.dk_grey_bkd { background-color: #999999; }
|
||||
*/
|
||||
/* Copyright, Legal Notice */
|
||||
.copyright
|
||||
{
|
||||
color: #666666;
|
||||
font-size: small;
|
||||
}
|
||||
|
||||
div div.legalnotice p
|
||||
{
|
||||
color: #666666;
|
||||
}
|
||||
|
||||
/* Program listing */
|
||||
pre.synopsis
|
||||
{
|
||||
border: 1px solid #DCDCDC;
|
||||
}
|
||||
|
||||
.programlisting,
|
||||
.screen
|
||||
{
|
||||
border: 1px solid #DCDCDC;
|
||||
}
|
||||
|
||||
td .programlisting,
|
||||
td .screen
|
||||
{
|
||||
border: 0px solid #DCDCDC;
|
||||
}
|
||||
|
||||
/* Blurbs */
|
||||
div.note,
|
||||
div.tip,
|
||||
div.important,
|
||||
div.caution,
|
||||
div.warning,
|
||||
p.blurb
|
||||
{
|
||||
border: 1px solid #DCDCDC;
|
||||
}
|
||||
|
||||
/* Table of contents */
|
||||
.toc
|
||||
{
|
||||
border: 1px solid #DCDCDC;
|
||||
}
|
||||
|
||||
/* Tables */
|
||||
div.informaltable table tr td,
|
||||
div.table table tr td
|
||||
{
|
||||
border: 1px solid #DCDCDC;
|
||||
}
|
||||
|
||||
div.informaltable table tr th,
|
||||
div.table table tr th
|
||||
{
|
||||
background-color: #F0F0F0;
|
||||
border: 1px solid #DCDCDC;
|
||||
}
|
||||
|
||||
/* Misc */
|
||||
span.highlight
|
||||
{
|
||||
color: #00A000;
|
||||
}
|
||||
}
|
||||
|
||||
@media print
|
||||
{
|
||||
/* Links */
|
||||
a
|
||||
{
|
||||
color: black;
|
||||
}
|
||||
|
||||
a:visited
|
||||
{
|
||||
color: black;
|
||||
}
|
||||
|
||||
.spirit-nav
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Program listing */
|
||||
pre.synopsis
|
||||
{
|
||||
border: 1px solid gray;
|
||||
}
|
||||
|
||||
.programlisting,
|
||||
.screen
|
||||
{
|
||||
border: 1px solid gray;
|
||||
}
|
||||
|
||||
td .programlisting,
|
||||
td .screen
|
||||
{
|
||||
border: 0px solid #DCDCDC;
|
||||
}
|
||||
|
||||
/* Table of contents */
|
||||
.toc
|
||||
{
|
||||
border: 1px solid gray;
|
||||
}
|
||||
|
||||
.informaltable table,
|
||||
.table table
|
||||
{
|
||||
border: 1px solid gray;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
/* Tables */
|
||||
div.informaltable table tr td,
|
||||
div.table table tr td
|
||||
{
|
||||
border: 1px solid gray;
|
||||
}
|
||||
|
||||
div.informaltable table tr th,
|
||||
div.table table tr th
|
||||
{
|
||||
border: 1px solid gray;
|
||||
}
|
||||
|
||||
/* Misc */
|
||||
span.highlight
|
||||
{
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
||||
/*=============================================================================
|
||||
Images
|
||||
=============================================================================*/
|
||||
|
||||
span.inlinemediaobject img
|
||||
{
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
BIN
doc/html/images/blank.png
Normal file
After Width: | Height: | Size: 374 B |
BIN
doc/html/images/caution.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
68
doc/html/images/caution.svg
Normal file
@ -0,0 +1,68 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 12.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 51448) --><svg height="120.648" id="Layer_1" inkscape:version="0.42" sodipodi:docbase="F:\openclip\svg da inviare" sodipodi:docname="Attenzione.svg" sodipodi:version="0.32" space="preserve" style="overflow:visible;enable-background:new 0 0 133.878 120.648;" version="1.1" viewBox="0 0 133.878 120.648" width="133.878" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<metadata>
|
||||
<rdf:RDF xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||
<cc:Work rdf:about="">
|
||||
<dc:title>Attenzione</dc:title>
|
||||
<dc:description></dc:description>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>pulsante</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<dc:publisher>
|
||||
<cc:Agent rdf:about="http://www.openclipart.org/">
|
||||
<dc:title>Open Clip Art Library</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:publisher>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Architetto Francesco Rollandin</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:rights>
|
||||
<cc:Agent>
|
||||
<dc:title>Architetto Francesco Rollandin</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:rights>
|
||||
<dc:date></dc:date>
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||
<cc:license rdf:resource="http://web.resource.org/cc/PublicDomain"/>
|
||||
<dc:language>en</dc:language>
|
||||
</cc:Work>
|
||||
<cc:License rdf:about="http://web.resource.org/cc/PublicDomain">
|
||||
<cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
|
||||
<cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
|
||||
<cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs id="defs43"/>
|
||||
<sodipodi:namedview bordercolor="#666666" borderopacity="1.0" id="base" inkscape:current-layer="Layer_1" inkscape:cx="66.939003" inkscape:cy="60.324001" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:window-height="510" inkscape:window-width="787" inkscape:window-x="44" inkscape:window-y="58" inkscape:zoom="2.9838869" pagecolor="#ffffff"/>
|
||||
<g id="g3">
|
||||
<linearGradient gradientTransform="matrix(56.9977 90.4964 90.4964 -56.9977 -27343.9609 47971.0547)" gradientUnits="userSpaceOnUse" id="XMLID_4_" x1="-244.5732" x2="-242.8169" y1="455.4199" y2="455.4199">
|
||||
<stop id="stop6" offset="0" style="stop-color:#FFFA5F"/>
|
||||
<stop id="stop8" offset="1" style="stop-color:#9F3300"/>
|
||||
</linearGradient>
|
||||
<path d="M51.333,8.834C34.985,37.343,18.638,65.854,2.289,94.363 c-7.081,12.352,3.352,26.285,16.453,26.285c6.708,0,13.418,0,20.128,0c22.109,0,44.217,0,66.327,0c3.644,0,7.286,0,10.931,0 c13.293,0,20.963-14.273,16.452-26.031c-4.114-10.729-11.861-20.99-17.542-30.922c-8.81-15.403-17.618-30.809-26.429-46.212 c-1.813-3.167-3.622-6.333-5.434-9.5C76.601-3.516,57.616-2.03,51.333,8.834 M53.973,9.064" id="path10" style="fill:url(#XMLID_4_);"/>
|
||||
<path d="M55.474,12.388c-8.247,14.279-16.492,28.559-24.739,42.839 c-5.526,9.567-11.05,19.137-16.577,28.707c-2.732,4.73-7.323,10.456-8.284,16c-3.799,21.9,34.927,15.743,46.734,15.743 c20.073,0,40.144,0,60.215,0c13.716,0,18.636-11.963,12.229-23.063c-6.462-11.195-12.927-22.388-19.389-33.582 c-7.249-12.557-14.499-25.113-21.75-37.671c-1.682-2.916-3.364-5.829-5.049-8.745C73.767,3.785,60.676,3.364,55.474,12.388" id="path12" style="fill-rule:evenodd;clip-rule:evenodd;fill:#FFF200;"/>
|
||||
<path d="M55.474,12.388c-8.247,14.279-16.492,28.559-24.739,42.839c-5.526,9.567-11.05,19.137-16.577,28.707 c-2.732,4.73-7.323,10.456-8.284,16c-3.799,21.9,34.927,15.743,46.734,15.743c20.073,0,40.144,0,60.215,0 c13.716,0,18.636-11.963,12.229-23.063c-6.462-11.195-12.927-22.388-19.389-33.582c-7.249-12.557-14.499-25.113-21.75-37.671 c-1.682-2.916-3.364-5.829-5.049-8.745C73.767,3.785,60.676,3.364,55.474,12.388" id="path14" style="fill:#FFCE00;"/>
|
||||
<path d="M126.731,95.522c-8.733-15.127-17.468-30.253-26.201-45.379 c-5.537-9.595-11.078-19.188-16.616-28.781c-3.938-6.821-7.459-15.689-16.813-15.689c1.013,0,5.901,10.225,6.469,11.196 c5.451,9.314,10.902,18.63,16.352,27.947c9.217,15.749,18.433,31.498,27.646,47.249c2.302,3.933,5.356,10.555,1.308,14.397 c-3.148,2.987-7.99,3.196-12.099,3.196c-7.225,0-14.448,0-21.674,0c-22.125,0-44.251,0-66.377,0c-3.598,0-7.197,0-10.794,0 c5.285,7.909,16.341,6.02,24.546,6.02c13.009,0,26.017,0,39.023,0c11.979,0,23.958,0,35.937,0c2.516,0,5.032,0,7.547,0 C125.136,115.678,131.878,104.435,126.731,95.522" id="path16" style="fill:#FFB600;"/>
|
||||
<path d="M14.615,112.457c-4.483-7.751,1.908-16.103,5.793-22.834 c4.698-8.138,9.398-16.276,14.097-24.414C44.54,47.83,54.574,30.448,64.61,13.069c0.789-1.367,3.725-4.568,2.594-5.539 c-3.913-3.353-10.287,1.936-12.107,5.087c-3.129,5.417-6.258,10.835-9.386,16.252c-11.105,19.226-22.209,38.453-33.313,57.68 c-1.649,2.854-3.299,5.713-4.95,8.569c-4.771,8.265-0.075,19.162,9.658,20.446C16.124,114.65,15.294,113.615,14.615,112.457" id="path18" style="fill-rule:evenodd;clip-rule:evenodd;fill:#FFE600;"/>
|
||||
<path d="M77.076,34.654c0,10.183-1.788,20.758-3.439,30.772 c-0.369,2.239-4.03,23.609-7.796,14.179c-4.247-10.632-4.832-23.419-5.958-34.696c-0.363-3.638-1.538-8.425-0.563-12.06 C61.667,24.099,77.076,25.199,77.076,34.654" id="path20" style="fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFE1;"/>
|
||||
<path d="M77.076,34.654c-2.018,0.995-1.521,8.717-1.797,11.395c-0.685,6.643-1.505,13.282-2.614,19.869 c-0.79,4.701-1.301,10.862-3.954,14.981c-1.642,2.567-3.405-5.958-3.634-6.932c-2.948-12.443-4.464-25.664-5.09-38.43 c-0.272-5.52,5.164-8.854,10.277-7.622c3.87,0.933,5.217,7.36,7.688,6.738c0.009-11.451-19.755-11.453-19.746,0 c0.017,11.956,2.087,24.599,4.423,36.294c0.501,2.507,1.642,12.376,5.449,12.376c4.059-0.021,5.285-11.432,5.79-14.137 c1.261-6.765,2.139-13.605,2.887-20.444C77.084,45.722,79.281,35.942,77.076,34.654" id="path22" style="fill:#FFFFFF;"/>
|
||||
<linearGradient gradientTransform="matrix(68.2284 33.0019 33.0019 -68.2284 1613.9791 39385.6641)" gradientUnits="userSpaceOnUse" id="XMLID_5_" x1="-246.981" x2="-245.2275" y1="458.29" y2="458.29">
|
||||
<stop id="stop25" offset="0" style="stop-color:#FFFA5F"/>
|
||||
<stop id="stop27" offset="1" style="stop-color:#9F3300"/>
|
||||
</linearGradient>
|
||||
<path d="M57.957,34.654c0,10.053,1.632,20.54,3.242,30.431 c0.479,2.936,4.912,26.502,9.99,15.164c4.987-11.134,5.351-25.201,6.386-37.184c0.273-3.169,1.153-7.045,0.421-10.221 C75.628,22.587,57.957,23.788,57.957,34.654 M60.207,34.654c0-8.061,13.138-9.015,15.459-1.792c1.156,3.597-0.13,8.748-0.508,12.38 c-1.135,10.904-2.052,22.602-5.501,33.069c-2.816,8.545-5.546-10.187-5.934-12.522C62.039,55.63,60.207,44.985,60.207,34.654" id="path29" style="fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_5_);"/>
|
||||
<path d="M77.076,96.788c0,11.964-18.555,11.964-18.555,0 C58.521,84.822,77.076,84.822,77.076,96.788" id="path31" style="fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFE1;"/>
|
||||
<path d="M77.076,96.788c-2.605,1.661-2.157,6.757-7.044,8.101c-6.178,1.7-12.033-4.159-10.336-10.335 c1.439-5.23,7.657-7.767,12.341-5.021c2.91,1.704,3.164,7.913,5.915,7.256c0-14.267-22.698-12.238-20.143,1.826 c0.987,5.444,6.375,9.15,11.814,8.162C72.417,106.271,81.44,98.19,77.076,96.788" id="path33" style="fill:#FFFFFF;"/>
|
||||
<linearGradient gradientTransform="matrix(68.2241 32.9998 32.9998 -68.2241 1604.682 39402.625)" gradientUnits="userSpaceOnUse" id="XMLID_6_" x1="-246.998" x2="-245.2348" y1="458.0625" y2="458.0625">
|
||||
<stop id="stop36" offset="0" style="stop-color:#FFFA5F"/>
|
||||
<stop id="stop38" offset="1" style="stop-color:#9F3300"/>
|
||||
</linearGradient>
|
||||
<path d="M57.395,96.788c0,13.41,20.805,13.41,20.805,0 C78.2,83.376,57.395,83.375,57.395,96.788 M59.647,96.788c0-10.514,16.301-10.514,16.301,0 C75.948,107.3,59.647,107.3,59.647,96.788" id="path40" style="fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_6_);"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 8.3 KiB |
BIN
doc/html/images/draft.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
doc/html/images/home.png
Normal file
After Width: | Height: | Size: 358 B |
26
doc/html/images/home.svg
Normal file
@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In -->
|
||||
<!DOCTYPE svg [
|
||||
<!ENTITY st0 "fill-rule:nonzero;clip-rule:nonzero;fill:#FFFFFF;stroke:#000000;stroke-miterlimit:4;">
|
||||
<!ENTITY st1 "fill:none;stroke:none;">
|
||||
<!ENTITY st2 "fill:#000000;">
|
||||
<!ENTITY st3 "fill:none;stroke:#FFFFFF;stroke-width:6.3469;stroke-linejoin:round;">
|
||||
<!ENTITY st4 "fill-rule:evenodd;clip-rule:evenodd;stroke:none;">
|
||||
<!ENTITY st5 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
|
||||
]>
|
||||
<svg width="48pt" height="48pt" viewBox="0 0 48 48" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="Layer_x0020_3" style="&st0;">
|
||||
<g style="&st4;">
|
||||
<path style="&st3;" d="M22.9,7.1L5.1,21.8l0,0c-0.3,0.3-0.5,0.8-0.5,1.2c0,0.2,0,0.4,0.1,0.6c0.3,0.6,0.9,1,1.6,1c0,0,1.1,0,2.2,0c0,2.4,0,14.2,0,14.2c0,1.1,0.8,1.9,1.8,1.9h27.4c1.1,0,1.9-0.9,1.9-2c0,0,0-11.8,0-14.2c1,0,2,0,2,0c0.8,0,1.4-0.5,1.7-1.2
|
||||
c0.1-0.2,0.1-0.4,0.1-0.6c0-0.5-0.2-1-0.7-1.4c0,0-3.6-3-4.5-3.7c0-1.2,0-6.9,0-6.9c0-1.2-0.8-2-2-2h-4.8c-1,0-1.7,0.6-1.9,1.5c-1.9-1.6-4.1-3.5-4.1-3.5l0.1,0.1c-0.7-0.7-1.8-0.8-2.7-0.1z"/>
|
||||
<path style="&st2;" d="M22.9,7.1L5.1,21.8l0,0c-0.3,0.3-0.5,0.8-0.5,1.2c0,0.2,0,0.4,0.1,0.6c0.3,0.6,0.9,1,1.6,1c0,0,1.1,0,2.2,0c0,2.4,0,14.2,0,14.2c0,1.1,0.8,1.9,1.8,1.9h27.4c1.1,0,1.9-0.9,1.9-2c0,0,0-11.8,0-14.2c1,0,2,0,2,0c0.8,0,1.4-0.5,1.7-1.2
|
||||
c0.1-0.2,0.1-0.4,0.1-0.6c0-0.5-0.2-1-0.7-1.4c0,0-3.6-3-4.5-3.7c0-1.2,0-6.9,0-6.9c0-1.2-0.8-2-2-2h-4.8c-1,0-1.7,0.6-1.9,1.5c-1.9-1.6-4.1-3.5-4.1-3.5l0.1,0.1c-0.7-0.7-1.8-0.8-2.7-0.1z"/>
|
||||
<path style="&st2;" d="M41.8,22.8l-5.1-4.2v-0.1L31,13.7v0l-6.5-5.5C24.2,8,24,8,23.8,8.2L6.2,22.9c-0.1,0.1-0.1,0.3,0.1,0.3h1.6H10h28.1h1.2h2.3c0.2,0,0.4-0.2,0.2-0.4z"/>
|
||||
<path d="M35.8,16.8l0-5.1c0-0.2-0.1-0.4-0.3-0.4h-3.2c-0.2,0-0.3,0.1-0.3,0.3v2.2l3.9,2.9z"/>
|
||||
<path d="M11.9,24.7V37c0,0.3,0.1,0.4,0.3,0.4h23.6c0.3,0,0.4-0.2,0.4-0.4V24.7H11.9z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="crop_x0020_marks" style="&st5;">
|
||||
<path style="&st1;" d="M48,48H0V0h48v48z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.0 KiB |
BIN
doc/html/images/important.png
Normal file
After Width: | Height: | Size: 722 B |
25
doc/html/images/important.svg
Normal file
@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In -->
|
||||
<!DOCTYPE svg [
|
||||
<!ENTITY st0 "fill:#FFFFFF;stroke:none;">
|
||||
<!ENTITY st1 "fill:#FFFFFF;stroke-width:6.6112;stroke-linecap:round;stroke-linejoin:round;">
|
||||
<!ENTITY st2 "stroke:#FFFFFF;stroke-width:6.6112;">
|
||||
<!ENTITY st3 "fill:none;stroke:none;">
|
||||
<!ENTITY st4 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
|
||||
<!ENTITY st5 "stroke:none;">
|
||||
]>
|
||||
<svg width="48pt" height="48pt" viewBox="0 0 48 48" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="Layer_x0020_3" style="&st4;">
|
||||
<g>
|
||||
<path style="&st2;" d="M41.7,35.3L26.6,9.4c-0.6-1-1.7-1.7-2.9-1.6c-1.2,0-2.3,0.7-2.9,1.7L6.3,35.4c-0.6,1-0.6,2.3,0,3.3c0.6,1,1.7,1.6,2.9,1.6h29.6c1.2,0,2.3-0.6,2.9-1.7c0.6-1,0.6-2.3,0-3.3z"/>
|
||||
<path style="&st1;" d="M23.7,11L9.2,37h29.6L23.7,11z"/>
|
||||
<path style="&st0;" d="M23.7,11.9L10.3,36.1h27.5l-14-24.1z"/>
|
||||
<g>
|
||||
<path style="&st5;" d="M24.1,34c-1.1,0-1.8-0.8-1.8-1.8c0-1.1,0.7-1.8,1.8-1.8c1.1,0,1.8,0.7,1.8,1.8c0,1-0.7,1.8-1.8,1.8h0z M22.9,29.3l-0.4-9.1h3.2l-0.4,9.1h-2.3z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="crop_x0020_marks" style="&st4;">
|
||||
<path style="&st3;" d="M48,48H0V0h48v48z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
BIN
doc/html/images/next.png
Normal file
After Width: | Height: | Size: 336 B |
19
doc/html/images/next.svg
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In -->
|
||||
<!DOCTYPE svg [
|
||||
<!ENTITY st0 "fill:none;stroke:none;">
|
||||
<!ENTITY st1 "fill:#FFFFFF;stroke:#FFFFFF;stroke-width:7.5901;stroke-linejoin:round;">
|
||||
<!ENTITY st2 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
|
||||
<!ENTITY st3 "stroke:none;">
|
||||
]>
|
||||
<svg width="48pt" height="48pt" viewBox="0 0 48 48" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="Layer_x0020_3" style="&st2;">
|
||||
<g>
|
||||
<path style="&st1;" d="M22.4,41.1c0,0.3,0.3,0.3,0.5,0.2l16.6-16.9c0.5-0.5,0.4-0.7,0-1L22.9,6.7c-0.1-0.1-0.4-0.1-0.4,0.1v10H8.9c-0.3,0-0.5,0.2-0.5,0.4l0,13.3C8.4,30.9,8.6,31,9,31h13.5l-0.1,10.1z"/>
|
||||
<path style="&st3;" d="M22.4,41.1c0,0.3,0.3,0.3,0.5,0.2l16.6-16.9c0.5-0.5,0.4-0.7,0-1L22.9,6.7c-0.1-0.1-0.4-0.1-0.4,0.1v10H8.9c-0.3,0-0.5,0.2-0.5,0.4l0,13.3C8.4,30.9,8.6,31,9,31h13.5l-0.1,10.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="crop_x0020_marks" style="&st2;">
|
||||
<path style="&st0;" d="M48,48H0V0h48v48z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.0 KiB |
BIN
doc/html/images/next_disabled.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
doc/html/images/note.png
Normal file
After Width: | Height: | Size: 490 B |
33
doc/html/images/note.svg
Normal file
@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In -->
|
||||
<!DOCTYPE svg [
|
||||
<!ENTITY st0 "fill:none;stroke:#FFFFFF;stroke-width:12.1438;stroke-linejoin:round;">
|
||||
<!ENTITY st1 "fill:none;stroke-width:1.2429;">
|
||||
<!ENTITY st2 "fill:#FFFFFF;stroke:none;">
|
||||
<!ENTITY st3 "fill:none;stroke:#FFFFFF;stroke-width:12.7649;stroke-linejoin:round;">
|
||||
<!ENTITY st4 "fill:#FFFFFF;stroke-width:6.3824;stroke-linejoin:round;">
|
||||
<!ENTITY st5 "fill:none;stroke:none;">
|
||||
<!ENTITY st6 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
|
||||
<!ENTITY st7 "fill:#FFFFFF;stroke:#FFFFFF;stroke-width:12.7649;stroke-linejoin:round;">
|
||||
<!ENTITY st8 "stroke:none;">
|
||||
<!ENTITY st9 "fill:none;stroke-width:4.9715;stroke-linejoin:round;">
|
||||
]>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="48pt" height="48pt" viewBox="0 0 48 48" xml:space="preserve">
|
||||
<g id="Layer_x0020_1" style="&st6;">
|
||||
<path style="&st0;" d="M35.7,19.8v18.9H11V8.8h13.9l10.8,11z"/>
|
||||
<path style="&st3;" d="M38.7,30.4L25,16.7l-7.7-3l2.7,8.7l13.3,13.4l5.4-5.4z"/>
|
||||
<path style="&st7;" d="M35.7,8.8H11v29.9h24.7V8.8z"/>
|
||||
<path style="&st4;" d="M35.7,8.8H11v29.9h24.7V8.8z"/>
|
||||
<path style="&st2;" d="M35.7,8.8H11v29.9h24.7V8.8z"/>
|
||||
</g>
|
||||
<g id="Layer_x0020_4" style="&st6;">
|
||||
<path style="&st9;" d="M38.7,30.4L25,16.7l-7.7-3l2.7,8.7l13.3,13.4l5.4-5.4z"/>
|
||||
<path style="&st8;" d="M38.7,30.4L25,16.7l-7.7-3l2.7,8.7l13.3,13.4l5.4-5.4z"/>
|
||||
<path style="&st8;" d="M20.6,14.7l-2.5,2.5L17,13.4l3.6,1.3z"/>
|
||||
<path style="&st1;" d="M19.6,22.2l3-0.3l2.4-2.4l0.4-2.8"/>
|
||||
<path style="&st2;" d="M20.4,14.9L18.3,17l1.6,5.2l2.7-0.3l2.4-2.4l0.3-2.4l-5-2.2z"/>
|
||||
</g>
|
||||
<g id="crop" style="&st6;">
|
||||
<path style="&st5;" d="M48,48H0V0h48v48z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
BIN
doc/html/images/prev.png
Normal file
After Width: | Height: | Size: 334 B |
19
doc/html/images/prev.svg
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In -->
|
||||
<!DOCTYPE svg [
|
||||
<!ENTITY st0 "fill:none;stroke:none;">
|
||||
<!ENTITY st1 "fill:#FFFFFF;stroke:#FFFFFF;stroke-width:7.5901;stroke-linejoin:round;">
|
||||
<!ENTITY st2 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
|
||||
<!ENTITY st3 "stroke:none;">
|
||||
]>
|
||||
<svg width="48pt" height="48pt" viewBox="0 0 48 48" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="Layer_x0020_3" style="&st2;">
|
||||
<g>
|
||||
<path style="&st1;" d="M25.6,6.9c0-0.3-0.3-0.3-0.5-0.2L8.4,23.6c-0.5,0.5-0.4,0.7,0,1l16.6,16.6c0.1,0.1,0.4,0.1,0.4-0.1v-10h13.6c0.3,0,0.5-0.2,0.5-0.4l0-13.3c0-0.3-0.2-0.5-0.5-0.5H25.5l0.1-10.1z"/>
|
||||
<path style="&st3;" d="M25.6,6.9c0-0.3-0.3-0.3-0.5-0.2L8.4,23.6c-0.5,0.5-0.4,0.7,0,1l16.6,16.6c0.1,0.1,0.4,0.1,0.4-0.1v-10h13.6c0.3,0,0.5-0.2,0.5-0.4l0-13.3c0-0.3-0.2-0.5-0.5-0.5H25.5l0.1-10.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="crop_x0020_marks" style="&st2;">
|
||||
<path style="&st0;" d="M48,48H0V0h48v48z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.0 KiB |
BIN
doc/html/images/prev_disabled.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
doc/html/images/tip.png
Normal file
After Width: | Height: | Size: 449 B |
84
doc/html/images/tip.svg
Normal file
@ -0,0 +1,84 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) --><svg height="1052.3622047" id="svg2" inkscape:version="0.42.2" sodipodi:docbase="/home/sergio/tmp/downloads" sodipodi:docname="lamp.svg" sodipodi:version="0.32" width="744.09448819" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<metadata>
|
||||
<rdf:RDF xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||
<cc:Work rdf:about="">
|
||||
<dc:title>lamp</dc:title>
|
||||
<dc:description></dc:description>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>office</rdf:li>
|
||||
<rdf:li></rdf:li>
|
||||
<rdf:li>lamp</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<dc:publisher>
|
||||
<cc:Agent rdf:about="http://www.openclipart.org/">
|
||||
<dc:title>Open Clip Art Library</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:publisher>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Sergio Luiz Araujo Silva</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:rights>
|
||||
<cc:Agent>
|
||||
<dc:title>Public Domain</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:rights>
|
||||
<dc:date>set 2005</dc:date>
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||
<cc:license rdf:resource="http://web.resource.org/cc/PublicDomain"/>
|
||||
<dc:language>en</dc:language>
|
||||
</cc:Work>
|
||||
<cc:License rdf:about="http://web.resource.org/cc/PublicDomain">
|
||||
<cc:permits rdf:resource="http://web.resource.org/cc/Reproduction"/>
|
||||
<cc:permits rdf:resource="http://web.resource.org/cc/Distribution"/>
|
||||
<cc:permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/>
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs id="defs4">
|
||||
<linearGradient id="linearGradient13125">
|
||||
<stop id="stop13127" offset="0.0000000" style="stop-color:#ffffff;stop-opacity:1.0000000;"/>
|
||||
<stop id="stop13129" offset="1" style="stop-color:#fffeff;stop-opacity:0;"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linearGradient12389">
|
||||
<stop id="stop12391" offset="0.0000000" style="stop-color:#fefefe;stop-opacity:1.0000000;"/>
|
||||
<stop id="stop12393" offset="1.0000000" style="stop-color:#fffefe;stop-opacity:1.0000000;"/>
|
||||
</linearGradient>
|
||||
<radialGradient cx="358.25909" cy="186.06468" fx="358.25909" fy="186.06468" gradientTransform="matrix(1.000001,-8.244061e-7,3.143917e-7,0.381356,-4.028738e-4,115.1081)" gradientUnits="userSpaceOnUse" id="radialGradient13131" inkscape:collect="always" r="27.486719" xlink:href="#linearGradient13125"/>
|
||||
<radialGradient cx="358.25909" cy="186.06468" fx="358.25909" fy="186.06468" gradientTransform="matrix(1.000001,-8.244061e-7,3.143917e-7,0.381356,-4.028738e-4,115.1081)" gradientUnits="userSpaceOnUse" id="radialGradient14587" inkscape:collect="always" r="27.486719" xlink:href="#linearGradient13125"/>
|
||||
<radialGradient cx="358.25909" cy="186.06468" fx="358.25909" fy="186.06468" gradientTransform="matrix(1.000001,-8.244061e-7,3.143917e-7,0.381356,-4.028738e-4,115.1081)" gradientUnits="userSpaceOnUse" id="radialGradient15390" inkscape:collect="always" r="27.486719" xlink:href="#linearGradient13125"/>
|
||||
<radialGradient cx="358.25909" cy="186.06468" fx="358.25909" fy="186.06468" gradientTransform="matrix(1.000001,-8.244061e-7,3.143917e-7,0.381356,-4.028738e-4,115.1081)" gradientUnits="userSpaceOnUse" id="radialGradient16141" inkscape:collect="always" r="27.486719" xlink:href="#linearGradient13125"/>
|
||||
</defs>
|
||||
<sodipodi:namedview bordercolor="#666666" borderopacity="1.0" id="base" inkscape:current-layer="layer1" inkscape:cx="344.34505" inkscape:cy="795.78292" inkscape:document-units="px" inkscape:guide-bbox="true" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:window-height="693" inkscape:window-width="1024" inkscape:window-x="0" inkscape:window-y="25" inkscape:zoom="0.72123084" pagecolor="#ffffff" showguides="true"/>
|
||||
<g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1">
|
||||
<path d="M 369.44028,121.86683 C 302.64703,119.68096 242.59223,184.30679 250.47188,250.87980 C 252.47522,280.21980 267.84094,306.49880 285.94332,328.82253 C 303.71281,358.65039 312.13900,393.24133 313.51068,427.73030 C 317.00419,446.97288 338.01608,454.57063 355.35334,455.26572 C 375.18456,456.91501 395.94281,455.09265 414.43470,447.69729 C 430.92724,435.70557 427.37713,413.20597 430.74488,395.55648 C 434.70351,361.57615 449.78002,329.76555 471.07843,303.26619 C 504.41026,252.31528 488.56419,176.76397 437.75400,143.26422 C 417.82956,129.49394 393.70573,121.69096 369.44028,121.86683 z " id="path1384" style="opacity:1.0000000;fill:#f3f2f3;fill-opacity:0.83333331;stroke:#000000;stroke-width:0.58960420;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000"/>
|
||||
<path d="M 425.72698,154.07768 C 437.68158,164.87540 453.68534,182.03604 451.17873,203.82428 C 455.99913,200.54641 460.81954,197.26853 465.63995,193.99066 C 459.85546,170.27425 448.28648,162.75442 425.72698,154.07768 z " id="path2153" sodipodi:nodetypes="cccc" style="fill:#fefefe;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"/>
|
||||
<path d="M 506.99897 296.94009 A 37.120701 18.718985 0 1 1 432.75756,296.94009 A 37.120701 18.718985 0 1 1 506.99897 296.94009 z" id="path2881" sodipodi:cx="469.87827" sodipodi:cy="296.94009" sodipodi:rx="37.120701" sodipodi:ry="18.718985" sodipodi:type="arc" style="opacity:1.0000000;color:#000000;fill:#fefefe;fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:0.64700001;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" transform="matrix(0.818103,0.000000,0.000000,0.896150,-13.89510,-26.68653)"/>
|
||||
<path d="M 359.20536,314.30802 L 336.64585,244.31570 C 362.29042,230.62575 382.72895,234.28926 403.16748,243.15881 L 379.45107,315.46491 L 379.45107,315.46491" id="path3617" sodipodi:nodetypes="ccccc" style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#8f9595;stroke-width:0.91160071px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"/>
|
||||
<path d="M 513.73605 514.32300 A 52.508934 11.885468 0 1 1 408.71818,514.32300 A 52.508934 11.885468 0 1 1 513.73605 514.32300 z" id="path4361" sodipodi:cx="461.22711" sodipodi:cy="514.32300" sodipodi:rx="52.508934" sodipodi:ry="11.885468" sodipodi:type="arc" style="opacity:1.0000000;color:#000000;fill:#a0a0a0;fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:0.64700001;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" transform="matrix(0.982435,0.000000,0.000000,1.387810,-83.52495,-281.2705)"/>
|
||||
<path d="M 315.87677,433.07959 C 319.14672,442.90428 329.03398,448.82383 338.76816,450.68840 C 362.00206,456.37952 386.74882,455.38004 409.63484,448.57985 C 414.28840,447.19363 419.18392,445.42184 422.06530,441.25295 C 423.42527,439.84003 425.68582,434.46169 424.07088,434.30126 C 411.81432,444.17256 395.75685,447.78808 380.34111,448.56322 C 362.85475,449.05661 344.64886,448.26521 328.51659,440.79114 C 324.02706,438.71576 319.76022,436.14612 315.87677,433.07959 z " id="path4363" style="fill:#d6dee6;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"/>
|
||||
<path d="M 400.47436,522.16227 C 396.48542,528.09177 392.49650,534.02126 388.50756,539.95076 C 383.93367,541.47295 366.98819,546.44954 353.57745,538.01018 C 350.34318,532.29631 347.10892,526.58244 343.87465,520.86856 C 364.35835,531.64946 396.48542,523.99502 400.47436,522.16227 z " id="path5094" sodipodi:nodetypes="ccccc" style="fill:#090a0c;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.91160071px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"/>
|
||||
<path d="M 419.65600,444.27781 C 419.97026,446.39906 420.28452,448.52031 420.59878,450.64156 C 421.46299,450.95582 422.32720,451.27008 423.19142,451.58434 C 423.19142,452.91994 423.19142,454.25554 423.19142,455.59114 C 422.32720,455.98397 421.46299,456.37678 420.59878,456.76961 C 420.36308,459.20512 420.12739,461.64063 419.89170,464.07614 C 420.52021,464.23327 421.14873,464.39039 421.77725,464.54753 C 421.69869,466.59021 421.62012,468.63289 421.54156,470.67558 C 420.83447,471.46123 420.12739,472.24688 419.42030,473.03253 C 419.57744,474.05387 419.73456,475.07522 419.89170,476.09656 C 420.91303,477.11790 421.93438,478.13925 422.95572,479.16058 C 422.87716,480.18193 422.79859,481.20328 422.72003,482.22461 C 422.01294,483.01026 421.30586,483.79591 420.59878,484.58156 C 420.36308,485.05294 420.12739,485.52433 419.89170,485.99572 C 419.57744,486.70280 419.26317,487.40989 418.94892,488.11697 C 419.10605,489.05975 419.26317,490.00253 419.42030,490.94531 C 419.89170,491.65239 420.36308,492.35947 420.83447,493.06655 C 420.67734,494.71641 420.52021,496.36627 420.36308,498.01614 C 415.02067,505.24410 409.67827,512.47206 404.33587,519.70003 C 403.15740,520.24998 401.97892,520.79994 400.80045,521.34989 C 397.81498,522.29266 394.82952,523.23544 391.84406,524.17822 C 386.34452,524.80674 380.84498,525.43525 375.34545,526.06378 C 371.96717,525.90664 368.58887,525.74952 365.21059,525.59238 C 362.46082,525.51382 359.71105,525.43525 356.96128,525.35669 C 353.42587,524.49247 349.89045,523.62827 346.35503,522.76405 C 345.17656,521.82128 343.99809,520.87850 342.81962,519.93572 C 339.75559,517.81447 336.69157,515.69322 333.62754,513.57197 C 328.75652,508.30813 323.88551,503.04429 319.01448,497.78044 C 319.01448,496.52341 319.01448,495.26636 319.01448,494.00933 C 319.87870,494.00933 320.74291,494.00933 321.60712,494.00933 C 321.13574,492.83086 320.66435,491.65239 320.19296,490.47392 C 319.09305,488.19554 317.99314,485.91716 316.89323,483.63878 C 316.89323,482.93170 316.89323,482.22461 316.89323,481.51753 C 318.38597,480.26049 319.87869,479.00345 321.37143,477.74642 C 320.03583,475.54660 318.70022,473.34679 317.36462,471.14697 C 317.28606,470.83271 317.20748,470.51845 317.12892,470.20419 C 318.46453,468.39720 319.80013,466.59021 321.13574,464.78322 C 320.74291,463.68331 320.35009,462.58341 319.95726,461.48350 C 319.09305,460.38359 318.22883,459.28369 317.36462,458.18378 C 317.12892,457.31956 316.89323,456.45536 316.65753,455.59114 C 317.75744,454.17697 318.85735,452.76281 319.95726,451.34864 C 319.87870,450.01304 319.80013,448.67744 319.72157,447.34184 C 319.32874,446.71332 318.93592,446.08480 318.54310,445.45628 C 318.62166,444.74920 318.70023,444.04212 318.77879,443.33503 C 319.48588,443.25647 320.19296,443.17790 320.90004,443.09934 C 324.04263,445.22059 327.18523,447.34184 330.32782,449.46309 C 348.08347,456.92674 391.76550,461.09068 419.65600,444.27781 z " id="path7284" sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccc" style="fill:#fba246;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.91160071px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"/>
|
||||
<path d="M 389.86281,523.00744 C 389.46998,521.82897 391.23336,522.26765 390.84054,521.08918 C 383.37688,521.01061 375.91323,520.93205 368.44957,520.85348 C 368.44957,520.53923 368.44957,520.22496 368.44957,519.91070 C 374.10624,519.75357 379.76290,519.59645 385.41957,519.43932 C 388.24790,518.88937 391.07623,518.33941 393.90457,517.78946 C 395.39730,517.55377 396.89003,517.31807 398.38277,517.08237 C 401.44679,515.03969 404.51082,512.99701 407.57485,510.95432 C 407.49629,510.64006 407.41771,510.32580 407.33915,510.01153 C 401.36822,510.48292 395.39730,510.95432 389.42637,511.42571 C 387.30512,511.81853 385.18387,512.21135 383.06263,512.60418 C 379.13438,512.36849 375.20615,512.13279 371.27790,511.89710 C 369.78518,511.73997 368.29244,511.58284 366.79971,511.42571 C 364.44277,510.32580 362.08582,509.22589 359.72888,508.12598 C 376.54175,507.18320 396.89003,507.18320 415.11707,493.98432 C 391.31192,502.15506 371.27790,500.19093 355.01499,497.99112 C 375.91322,494.06288 396.57577,493.19867 417.00262,478.42849 C 387.38368,489.42756 366.24975,485.57788 349.35832,483.84946 C 371.51360,479.29269 403.56804,478.27136 414.40998,466.64376 C 383.06263,474.89306 355.95776,473.47890 338.75207,469.47210 C 352.81517,467.58654 366.87827,465.70098 380.94137,463.81543 C 374.10624,463.18691 367.27110,462.55840 360.43596,461.92988 C 373.32059,459.73006 386.20522,457.53024 399.08985,455.33043 C 381.88416,456.19465 346.53000,460.82997 319.89653,444.48849 C 323.66763,447.63108 328.61721,449.83090 331.20985,453.91627 C 327.28161,453.44487 323.35338,452.97349 319.42513,452.50210 C 319.66083,453.83770 319.89653,455.17330 320.13222,456.50890 C 324.13902,459.02298 328.14582,461.53704 332.15263,464.05112 C 327.43875,466.25093 322.72485,468.45075 318.01096,470.65057 C 323.90332,472.53612 329.79568,474.42169 335.68805,476.30724 C 330.03138,478.66418 322.48915,476.30724 318.71804,483.37807 C 325.55318,486.59923 335.21666,487.22774 339.22346,493.04154 C 333.33110,493.51293 326.73166,489.27043 321.54639,494.45571 C 327.67444,498.06968 333.80249,501.68367 339.93055,505.29765 C 336.55226,504.82626 333.17397,504.35487 329.79568,503.88348 C 334.58814,509.30445 341.26727,513.37780 346.05972,518.79877 C 362.00838,520.29150 373.91416,521.51471 389.86281,523.00744 z " id="path6556" sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccc" style="fill:#ffc080;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"/>
|
||||
<path d="M 410.63580,448.38806 C 375.91016,459.46570 347.07688,453.33765 330.49970,448.38806 C 332.54238,449.09515 334.58507,449.80223 336.62775,450.50931 C 365.30391,460.56561 396.80839,453.41621 407.80747,450.27362 C 408.75025,449.64510 409.69303,449.01658 410.63580,448.38806 z " id="path7286" sodipodi:nodetypes="ccccc" style="fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"/>
|
||||
<path d="M 431.22109,368.33927 C 427.74256,388.71364 424.26401,409.08801 420.78546,429.46237 C 416.60557,437.06563 407.94091,440.30372 400.07083,442.61238 C 391.48668,445.18530 382.40444,445.05799 373.54205,444.61656 C 371.08048,446.38986 364.99205,442.92177 370.06503,441.81235 C 377.17154,440.98795 384.60188,442.10538 391.38552,439.26558 C 401.04319,435.47671 410.26670,429.97354 417.05844,422.00834 C 421.19961,403.95301 425.34070,385.89766 429.48184,367.84233 C 430.06159,368.00798 430.64135,368.17360 431.22109,368.33927 z " id="path3629" style="fill:#ffffff;fill-opacity:0.64285713;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"/>
|
||||
<path d="M 353.42087,428.84088 L 351.10708,419.00725 L 351.68553,378.22661 L 353.13164,373.45440 L 353.05576,339.28565 L 349.95018,336.28751 L 349.37173,316.04336 C 363.86558,304.49563 376.56238,306.21837 388.70625,316.23514 L 388.12780,336.28907 L 385.23556,339.18131 L 384.65711,373.58108 L 386.39245,378.21491 L 385.81401,427.68398 L 382.34331,429.99778 L 374.24503,428.84088 L 371.35278,425.37019 L 366.14675,425.37019 L 360.94071,429.41933 L 353.42087,428.84088 z " id="path3619" sodipodi:nodetypes="ccccccccccccccccccc" style="fill:#c1c1c1;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#9b989f;stroke-width:0.91160071px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"/>
|
||||
<path d="M 358.25832,325.31572 L 358.25832,416.41507" id="path5096" style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.91160071px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"/>
|
||||
<path d="M 380.15345,325.31572 L 380.15345,416.41507" id="path5824" style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.91160071px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"/>
|
||||
<path d="M 361.91098,325.31572 L 361.91098,416.41507" id="path5826" style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#8f8f92;stroke-width:0.91160071px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"/>
|
||||
<path d="M 376.52161,325.31572 L 376.52161,416.41507" id="path6554" style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#8f8f92;stroke-width:0.91160071px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"/>
|
||||
<g id="g9475" transform="matrix(0.911601,0.000000,0.000000,0.911601,328.5961,-156.2531)">
|
||||
<path d="M 86.864034,673.56687 L 79.199560,676.97330 L 77.155700,678.67652 L 75.793127,679.69845 L 65.573829,679.35780 L 65.403508,678.33587 L 70.683478,676.97330 C 70.683478,676.97330 74.430554,676.63266 75.111841,676.46234 C 75.793127,676.29201 78.688595,674.92944 78.688595,674.92944 L 84.649852,671.52301 L 87.034355,671.52301 L 86.864034,673.56687 z " id="path8741" style="fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"/>
|
||||
<path d="M 91.973683,686.34099 L 88.056285,686.17067 L 85.331139,687.53324 L 81.073098,689.23646 L 77.836987,691.45064 L 75.111841,692.30225 L 70.853800,692.64289 L 69.320905,693.15386 L 71.024122,693.83514 L 75.963449,693.83514 L 80.221490,694.51643 L 83.627923,693.83514 L 87.545320,690.42871 C 87.545320,690.42871 90.270466,689.23646 90.951753,688.89581 C 91.633039,688.55517 93.165934,687.87388 93.165934,687.87388 L 91.973683,686.34099 z " id="path8743" style="fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"/>
|
||||
<path d="M 94.017542,700.30736 L 89.078215,703.03251 L 85.842104,705.07637 L 83.457601,706.94991 L 77.836987,708.14216 L 75.622806,708.14216 L 81.584063,710.01570 L 86.353069,707.97184 L 91.292396,705.58733 L 92.825291,704.05444 L 94.017542,700.30736 z " id="path8745" style="fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"/>
|
||||
<path d="M 91.462718,717.85049 C 91.462718,717.85049 81.924706,721.59757 81.584063,722.27885 C 81.243420,722.96014 78.688595,723.98207 78.688595,723.98207 L 72.897660,724.66336 L 71.024122,725.68529 L 76.644736,726.36657 L 82.435671,724.49304 L 86.693712,724.32271 L 89.929823,722.10853 L 91.462718,720.40532 L 91.462718,717.85049 z " id="path8747" style="fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"/>
|
||||
</g>
|
||||
<path d="M 378.14273,525.28637 C 377.57434,530.51553 378.00099,537.83204 377.43261,543.06120 C 372.27918,543.00443 367.82875,543.82657 360.97078,541.72320 C 359.43614,536.89190 356.80919,529.30796 355.27454,524.47667 C 356.26507,524.72572 356.68741,524.86790 357.82038,524.93742 C 358.95335,525.00694 360.79692,524.96593 361.90337,525.03791 C 363.00981,525.10990 364.25012,525.06768 365.31257,525.13480 C 366.37503,525.20191 367.41113,525.22689 368.41214,525.28180 C 369.41314,525.33669 370.37905,525.38365 371.30113,525.41898 C 372.22321,525.45432 374.35115,525.55378 375.17683,525.56221 C 376.00251,525.57065 375.56381,525.48806 376.27564,525.46225 C 376.98745,525.43643 377.56225,525.35378 378.14273,525.28637 z " id="path10207" sodipodi:nodetypes="ccccsssssssc" style="fill:#ffffff;fill-opacity:0.31547615;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000"/>
|
||||
<path d="M 467.06377,199.37552 L 453.69293,208.53364 L 451.86130,221.53816 L 468.71223,214.21167 L 467.06377,199.37552 z " id="path16869" style="fill:#fefefe;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;opacity:1.0000000;color:#000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4.0000000;stroke-dasharray:none;stroke-dashoffset:0;visibility:visible;display:inline;overflow:visible"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 20 KiB |
BIN
doc/html/images/toc-blank.png
Normal file
After Width: | Height: | Size: 318 B |
BIN
doc/html/images/toc-minus.png
Normal file
After Width: | Height: | Size: 259 B |
BIN
doc/html/images/toc-plus.png
Normal file
After Width: | Height: | Size: 264 B |
BIN
doc/html/images/up.png
Normal file
After Width: | Height: | Size: 370 B |
19
doc/html/images/up.svg
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In -->
|
||||
<!DOCTYPE svg [
|
||||
<!ENTITY st0 "fill:none;stroke:none;">
|
||||
<!ENTITY st1 "fill:#FFFFFF;stroke:#FFFFFF;stroke-width:7.5901;stroke-linejoin:round;">
|
||||
<!ENTITY st2 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
|
||||
<!ENTITY st3 "stroke:none;">
|
||||
]>
|
||||
<svg width="48pt" height="48pt" viewBox="0 0 48 48" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="Layer_x0020_3" style="&st2;">
|
||||
<g>
|
||||
<path style="&st1;" d="M41.1,25.6c0.3,0,0.3-0.3,0.2-0.5L24.4,8.4c-0.5-0.5-0.7-0.4-1,0L6.7,25.1c-0.1,0.1-0.1,0.4,0.1,0.4h10v13.6c0,0.3,0.2,0.5,0.4,0.5l13.3,0c0.3,0,0.5-0.2,0.5-0.5V25.5l10.1,0.1z"/>
|
||||
<path style="&st3;" d="M41.1,25.6c0.3,0,0.3-0.3,0.2-0.5L24.4,8.4c-0.5-0.5-0.7-0.4-1,0L6.7,25.1c-0.1,0.1-0.1,0.4,0.1,0.4h10v13.6c0,0.3,0.2,0.5,0.4,0.5l13.3,0c0.3,0,0.5-0.2,0.5-0.5V25.5l10.1,0.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="crop_x0020_marks" style="&st2;">
|
||||
<path style="&st0;" d="M48,48H0V0h48v48z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.0 KiB |
BIN
doc/html/images/up_disabled.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
doc/html/images/warning.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
23
doc/html/images/warning.svg
Normal file
@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In -->
|
||||
<!DOCTYPE svg [
|
||||
<!ENTITY st0 "fill:#000000;stroke:#FFFFFF;stroke-width:7.9139;stroke-linejoin:round;">
|
||||
<!ENTITY st1 "fill-rule:nonzero;clip-rule:nonzero;fill:#FFFFFF;stroke:#000000;stroke-miterlimit:4;">
|
||||
<!ENTITY st2 "fill:none;stroke:none;">
|
||||
<!ENTITY st3 "fill:#000000;">
|
||||
<!ENTITY st4 "fill-rule:evenodd;clip-rule:evenodd;stroke:none;">
|
||||
<!ENTITY st5 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
|
||||
]>
|
||||
<svg width="48pt" height="48pt" viewBox="0 0 48 48" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
|
||||
<g id="Layer_x0020_4" style="&st1;">
|
||||
<g style="&st4;">
|
||||
<path style="&st0;" d="M16.4,42.3L5.7,31.6V16.4L16.4,5.7h15.2l10.7,10.7v15.2L31.6,42.3H16.4z"/>
|
||||
<path style="&st3;" d="M16.4,42.3L5.7,31.6V16.4L16.4,5.7h15.2l10.7,10.7v15.2L31.6,42.3H16.4z"/>
|
||||
<path d="M11.7,17.7l18.7,18.7l5.9-5.9L17.6,11.7l-5.9,5.9z"/>
|
||||
<path d="M11.7,30.5l5.9,5.9l18.7-18.7l-5.9-5.9L11.7,30.5z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="crop_x0020_marks" style="&st5;">
|
||||
<path style="&st2;" d="M48,48H0V0h48v48z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
51
doc/html/index.html
Normal file
@ -0,0 +1,51 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||
<title>AutoIndex</title>
|
||||
<link rel="stylesheet" href="boostbook.css" type="text/css">
|
||||
<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot_8125">
|
||||
<link rel="home" href="index.html" title="AutoIndex">
|
||||
<link rel="next" href="autoindex/overview.html" title="Overview">
|
||||
</head>
|
||||
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
|
||||
<table cellpadding="2" width="100%"><tr>
|
||||
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../boost.png"></td>
|
||||
<td align="center"><a href="../../index.html">Home</a></td>
|
||||
<td align="center"><a href="libraries.html">Libraries</a></td>
|
||||
<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
|
||||
<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
|
||||
<td align="center"><a href="../../more/index.htm">More</a></td>
|
||||
</tr></table>
|
||||
<hr>
|
||||
<div class="spirit-nav"><a accesskey="n" href="autoindex/overview.html"><img src="../../doc/html/images/next.png" alt="Next"></a></div>
|
||||
<div class="article" lang="en">
|
||||
<div class="titlepage">
|
||||
<div>
|
||||
<div><h2 class="title">
|
||||
<a name="autoindex"></a>AutoIndex</h2></div>
|
||||
<div><div class="authorgroup"><div class="author"><h3 class="author">
|
||||
<span class="firstname">John</span> <span class="surname">Maddock</span>
|
||||
</h3></div></div></div>
|
||||
<div><p class="copyright">Copyright © 2008 John Maddock</p></div>
|
||||
<div><div class="legalnotice">
|
||||
<a name="id473180"></a><p>
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
|
||||
</p>
|
||||
</div></div>
|
||||
</div>
|
||||
<hr>
|
||||
</div>
|
||||
<div class="toc">
|
||||
<p><b>Table of Contents</b></p>
|
||||
<dl><dt><span class="section"><a href="autoindex/overview.html"> Overview</a></span></dt></dl>
|
||||
</div>
|
||||
</div>
|
||||
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
|
||||
<td align="left"><p><small>Last revised: November 20, 2008 at 18:04:26 GMT</small></p></td>
|
||||
<td align="right"><div class="copyright-footer"></div></td>
|
||||
</tr></table>
|
||||
<hr>
|
||||
<div class="spirit-nav"><a accesskey="n" href="autoindex/overview.html"><img src="../../doc/html/images/next.png" alt="Next"></a></div>
|
||||
</body>
|
||||
</html>
|
5
doc/html/reference.css
Normal file
@ -0,0 +1,5 @@
|
||||
PRE.synopsis {
|
||||
background-color: #e0ffff;
|
||||
border: thin solid blue;
|
||||
padding: 1em
|
||||
}
|
BIN
doc/students_t_eg_1.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
doc/students_t_eg_2.png
Normal file
After Width: | Height: | Size: 8.1 KiB |
BIN
doc/students_t_eg_3.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
doc/students_t_eg_4.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
804
src/auto_index.cpp
Normal file
@ -0,0 +1,804 @@
|
||||
|
||||
#include "tiny_xml.hpp"
|
||||
#include <boost/regex.hpp>
|
||||
#include <boost/filesystem.hpp>
|
||||
#include <fstream>
|
||||
#include <cctype>
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <sstream>
|
||||
|
||||
int help()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
void eat_whitespace(std::istream & is)
|
||||
{
|
||||
char c = is.peek();
|
||||
while(std::isspace(c))
|
||||
{
|
||||
is.get(c);
|
||||
c = is.peek();
|
||||
}
|
||||
}
|
||||
|
||||
void eat_block(std::string& result, std::istream & is)
|
||||
{
|
||||
//
|
||||
// everything until we get to a closing '>':
|
||||
//
|
||||
char c;
|
||||
while(is.get(c) && c != '>')
|
||||
{
|
||||
result += c;
|
||||
if(c == '\\')
|
||||
{
|
||||
is.get(c);
|
||||
result += c;
|
||||
}
|
||||
}
|
||||
result += c;
|
||||
}
|
||||
|
||||
std::string get_header(std::istream & is)
|
||||
{
|
||||
//
|
||||
// We need to get any leading <? and <! elements:
|
||||
//
|
||||
std::string result;
|
||||
eat_whitespace(is);
|
||||
if(is.get() != '<')
|
||||
throw std::runtime_error("Invalid leading markup in XML file found");
|
||||
char c = is.peek();
|
||||
while((c == '?') || (c == '!'))
|
||||
{
|
||||
result += '<';
|
||||
eat_block(result, is);
|
||||
eat_whitespace(is);
|
||||
if(is.get() != '<')
|
||||
throw std::runtime_error("Invalid leading markup in XML file found");
|
||||
c = is.peek();
|
||||
result += '\n';
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
struct index_info
|
||||
{
|
||||
std::string term;
|
||||
boost::regex search_text;
|
||||
boost::regex search_id;
|
||||
std::string category;
|
||||
};
|
||||
bool operator < (const index_info& a, const index_info& b)
|
||||
{
|
||||
return a.term < b.term;
|
||||
}
|
||||
|
||||
std::multiset<index_info> index_terms;
|
||||
std::set<std::pair<std::string, std::string> > found_terms;
|
||||
bool no_duplicates = false;
|
||||
|
||||
struct index_entry;
|
||||
typedef boost::shared_ptr<index_entry> index_entry_ptr;
|
||||
bool operator < (const index_entry_ptr& a, const index_entry_ptr& b);
|
||||
typedef std::set<index_entry_ptr> index_entry_set;
|
||||
|
||||
std::string make_upper_key(const std::string& s)
|
||||
{
|
||||
std::string result;
|
||||
for(std::string::const_iterator i = s.begin(); i != s.end(); ++i)
|
||||
result.append(1, std::toupper(*i));
|
||||
return result;
|
||||
}
|
||||
|
||||
struct index_entry
|
||||
{
|
||||
std::string key;
|
||||
std::string sort_key;
|
||||
std::string id;
|
||||
std::string category;
|
||||
index_entry_set sub_keys;
|
||||
|
||||
index_entry(){}
|
||||
index_entry(const std::string& k) : key(k) { sort_key = make_upper_key(key); }
|
||||
index_entry(const std::string& k, const std::string& i) : key(k), id(i) { sort_key = make_upper_key(key); }
|
||||
index_entry(const std::string& k, const std::string& i, const std::string& c) : key(k), id(i), category(c) { sort_key = make_upper_key(key); }
|
||||
};
|
||||
|
||||
index_entry_set index_entries;
|
||||
|
||||
bool operator < (const index_entry_ptr& a, const index_entry_ptr& b)
|
||||
{
|
||||
return a->sort_key < b->sort_key;
|
||||
}
|
||||
|
||||
boost::tiny_xml::element_list indexes;
|
||||
|
||||
struct id_rewrite_rule
|
||||
{
|
||||
bool base_on_id;
|
||||
boost::regex id;
|
||||
std::string new_name;
|
||||
|
||||
id_rewrite_rule(const std::string& i, const std::string& n, bool b)
|
||||
: base_on_id(b), id(i), new_name(n) {}
|
||||
};
|
||||
std::list<id_rewrite_rule> id_rewrite_list;
|
||||
|
||||
bool internal_indexes = false;
|
||||
|
||||
struct node_id
|
||||
{
|
||||
const std::string* id;
|
||||
node_id* prev;
|
||||
};
|
||||
|
||||
struct title_info
|
||||
{
|
||||
std::string title;
|
||||
title_info* prev;
|
||||
};
|
||||
|
||||
const std::string* find_attr(boost::tiny_xml::element_ptr node, const char* name)
|
||||
{
|
||||
for(boost::tiny_xml::attribute_list::const_iterator i = node->attributes.begin();
|
||||
i != node->attributes.end(); ++i)
|
||||
{
|
||||
if(i->name == name)
|
||||
return &(i->value);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
const std::string* get_current_block_id(node_id const* id)
|
||||
{
|
||||
while((id->id == 0) && (id->prev))
|
||||
id = id->prev;
|
||||
return id->id;
|
||||
}
|
||||
|
||||
const std::string& get_current_block_title(title_info const* id)
|
||||
{
|
||||
while((id->title.size() == 0) && (id->prev))
|
||||
id = id->prev;
|
||||
return id->title;
|
||||
}
|
||||
|
||||
std::string get_consolidated_content(boost::tiny_xml::element_ptr node)
|
||||
{
|
||||
std::string result(node->content);
|
||||
for(boost::tiny_xml::element_list::const_iterator i = node->elements.begin();
|
||||
i != node->elements.end(); ++i)
|
||||
{
|
||||
result += " ";
|
||||
result += get_consolidated_content(*i);
|
||||
}
|
||||
static const boost::regex e("(^[[:space:]]+)|([[:space:]]+)|([[:space:]]+$)");
|
||||
return regex_replace(result, e, "(?2 )", boost::regex_constants::format_all);
|
||||
}
|
||||
|
||||
std::string rewrite_title(const std::string& title, const std::string& id)
|
||||
{
|
||||
for(std::list<id_rewrite_rule>::const_iterator i = id_rewrite_list.begin(); i != id_rewrite_list.end(); ++i)
|
||||
{
|
||||
if(i->base_on_id)
|
||||
{
|
||||
if(regex_match(id, i->id))
|
||||
return i->new_name;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(regex_match(title, i->id))
|
||||
return regex_replace(title, i->id, i->new_name);
|
||||
}
|
||||
}
|
||||
return title;
|
||||
}
|
||||
|
||||
void process_node(boost::tiny_xml::element_ptr node, node_id* prev, title_info* pt, boost::tiny_xml::element_ptr parent_node = boost::tiny_xml::element_ptr())
|
||||
{
|
||||
node_id id = { 0, prev };
|
||||
id.id = find_attr(node, "id");
|
||||
title_info title = { "", pt};
|
||||
if(node->name == "title")
|
||||
{
|
||||
//
|
||||
// This actually sets the title of the enclosing scope,
|
||||
// not this tag itself:
|
||||
//
|
||||
title.prev->title = get_consolidated_content(node);
|
||||
std::cout << "Indexing section: " << title.prev->title << std::endl;
|
||||
}
|
||||
else if(node->name == "index")
|
||||
{
|
||||
indexes.push_back(node);
|
||||
}
|
||||
|
||||
//
|
||||
// Search content for items:
|
||||
//
|
||||
static const boost::regex space_re("[[:space:]]+");
|
||||
if((node->name == "") && node->content.size() && !regex_match(node->content, space_re))
|
||||
{
|
||||
const std::string* pid = get_current_block_id(&id);
|
||||
const std::string& rtitle = get_current_block_title(&title);
|
||||
const std::string simple_title = rewrite_title(rtitle, *pid);
|
||||
|
||||
for(std::multiset<index_info>::const_iterator i = index_terms.begin();
|
||||
i != index_terms.end(); ++i)
|
||||
{
|
||||
if(regex_search(node->content, i->search_text))
|
||||
{
|
||||
//
|
||||
// We need to check to see if this term has already been indexed
|
||||
// in this zone, in order to prevent duplicate entries:
|
||||
//
|
||||
std::pair<std::string, std::string> item_index(*pid, i->term);
|
||||
if(((no_duplicates == false) || (0 == found_terms.count(item_index)))
|
||||
&& (i->search_id.empty() || regex_search(*pid, i->search_id)))
|
||||
{
|
||||
found_terms.insert(item_index);
|
||||
/*
|
||||
std::cout << "<indexterm zone=\"" << *pid << "\">\n <primary>"
|
||||
<< rtitle << "</primary>\n"
|
||||
<< " <secondary>" << i->first << "</secondary>\n</indexterm>" << std::endl;
|
||||
std::cout << "<indexterm zone=\"" << *pid << "\">\n <primary>"
|
||||
<< i->first << "</primary>\n"
|
||||
<< " <secondary>" << rtitle << "</secondary>\n</indexterm>" << std::endl;
|
||||
*/
|
||||
|
||||
if(internal_indexes == false)
|
||||
{
|
||||
boost::tiny_xml::element_ptr p(new boost::tiny_xml::element());
|
||||
p->name = "indexterm";
|
||||
boost::tiny_xml::element_ptr prim(new boost::tiny_xml::element());
|
||||
prim->name = "primary";
|
||||
prim->elements.push_front(boost::tiny_xml::element_ptr(new boost::tiny_xml::element()));
|
||||
prim->elements.front()->content = simple_title;
|
||||
p->elements.push_front(prim);
|
||||
|
||||
boost::tiny_xml::element_ptr sec(new boost::tiny_xml::element());
|
||||
sec->name = "secondary";
|
||||
sec->elements.push_front(boost::tiny_xml::element_ptr(new boost::tiny_xml::element()));
|
||||
sec->elements.front()->content = i->term;
|
||||
p->elements.push_back(sec);
|
||||
if(parent_node)
|
||||
parent_node->elements.push_front(p);
|
||||
}
|
||||
index_entry_ptr item1(new index_entry(simple_title));
|
||||
index_entry_ptr item2(new index_entry(i->term, *pid));
|
||||
if(index_entries.find(item1) == index_entries.end())
|
||||
{
|
||||
index_entries.insert(item1);
|
||||
}
|
||||
(**index_entries.find(item1)).sub_keys.insert(item2);
|
||||
|
||||
if(internal_indexes == false)
|
||||
{
|
||||
boost::tiny_xml::element_ptr p2(new boost::tiny_xml::element());
|
||||
p2->name = "indexterm";
|
||||
if(i->category.size())
|
||||
{
|
||||
p2->attributes.push_back(boost::tiny_xml::attribute("type", i->category));
|
||||
}
|
||||
boost::tiny_xml::element_ptr prim2(new boost::tiny_xml::element());
|
||||
prim2->name = "primary";
|
||||
prim2->elements.push_front(boost::tiny_xml::element_ptr(new boost::tiny_xml::element()));
|
||||
prim2->elements.front()->content = i->term;
|
||||
p2->elements.push_front(prim2);
|
||||
|
||||
boost::tiny_xml::element_ptr sec2(new boost::tiny_xml::element());
|
||||
sec2->name = "secondary";
|
||||
sec2->elements.push_front(boost::tiny_xml::element_ptr(new boost::tiny_xml::element()));
|
||||
sec2->elements.front()->content = rtitle;
|
||||
p2->elements.push_back(sec2);
|
||||
if(parent_node)
|
||||
parent_node->elements.push_front(p2);
|
||||
}
|
||||
index_entry_ptr item3(new index_entry(i->term));
|
||||
index_entry_ptr item4(new index_entry(rtitle, *pid));
|
||||
if(index_entries.find(item3) == index_entries.end())
|
||||
{
|
||||
index_entries.insert(item3);
|
||||
if(i->category.size())
|
||||
{
|
||||
(**index_entries.find(item3)).category = i->category;
|
||||
}
|
||||
}
|
||||
(**index_entries.find(item3)).sub_keys.insert(item4);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//
|
||||
// Recurse through children:
|
||||
//
|
||||
for(boost::tiny_xml::element_list::const_iterator i = node->elements.begin();
|
||||
i != node->elements.end(); ++i)
|
||||
{
|
||||
process_node(*i, &id, &title, node);
|
||||
}
|
||||
}
|
||||
|
||||
void process_nodes(boost::tiny_xml::element_ptr node)
|
||||
{
|
||||
node_id id = { 0, };
|
||||
title_info t = { "", 0 };
|
||||
process_node(node, &id, &t);
|
||||
}
|
||||
|
||||
void load_file(std::string& s, std::istream& is)
|
||||
{
|
||||
s.erase();
|
||||
if(is.bad()) return;
|
||||
s.reserve(is.rdbuf()->in_avail());
|
||||
char c;
|
||||
while(is.get(c))
|
||||
{
|
||||
if(s.capacity() == s.size())
|
||||
s.reserve(s.capacity() * 3);
|
||||
s.append(1, c);
|
||||
}
|
||||
}
|
||||
|
||||
void scan_file(const char* file)
|
||||
{
|
||||
static const boost::regex class_e(
|
||||
// possibly leading whitespace:
|
||||
"^[[:space:]]*"
|
||||
// possible template declaration:
|
||||
"(template[[:space:]]*<[^;:{]+>[[:space:]]*)?"
|
||||
// class or struct:
|
||||
"(class|struct)[[:space:]]*"
|
||||
// leading declspec macros etc:
|
||||
"("
|
||||
"\\<\\w+\\>"
|
||||
"("
|
||||
"[[:blank:]]*\\([^)]*\\)"
|
||||
")?"
|
||||
"[[:space:]]*"
|
||||
")*"
|
||||
// the class name
|
||||
"(\\<\\w*\\>)[[:space:]]*"
|
||||
// template specialisation parameters
|
||||
"(<[^;:{]+>)?[[:space:]]*"
|
||||
// terminate in { or :
|
||||
"(\\{|:[^;\\{()]*\\{)"
|
||||
);
|
||||
std::string text;
|
||||
std::ifstream is(file);
|
||||
load_file(text, is);
|
||||
{
|
||||
boost::sregex_token_iterator i(text.begin(), text.end(), class_e, 5), j;
|
||||
while(i != j)
|
||||
{
|
||||
index_info info;
|
||||
info.term = i->str();
|
||||
info.search_text = "\\<" + i->str() + "\\>";
|
||||
info.category = "class_name";
|
||||
if(index_terms.count(info) == 0)
|
||||
{
|
||||
std::cout << "Indexing class " << info.term << std::endl;
|
||||
index_terms.insert(info);
|
||||
}
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Now typedefs:
|
||||
//
|
||||
{
|
||||
static const boost::regex typedef_exp(
|
||||
"typedef.+?(\\w+)\\s*;");
|
||||
boost::sregex_token_iterator i(text.begin(), text.end(), typedef_exp, 1), j;
|
||||
while(i != j)
|
||||
{
|
||||
index_info info;
|
||||
info.term = i->str();
|
||||
info.search_text = "\\<" + i->str() + "\\>";
|
||||
info.category = "typedef_name";
|
||||
if(index_terms.count(info) == 0)
|
||||
{
|
||||
std::cout << "Indexing typedef " << info.term << std::endl;
|
||||
index_terms.insert(info);
|
||||
}
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Now macros:
|
||||
//
|
||||
{
|
||||
static const boost::regex e(
|
||||
"^\\s*#\\s*define\\s+(\\w+)"
|
||||
);
|
||||
boost::sregex_token_iterator i(text.begin(), text.end(), e, 1), j;
|
||||
while(i != j)
|
||||
{
|
||||
index_info info;
|
||||
info.term = i->str();
|
||||
info.search_text = "\\<" + i->str() + "\\>";
|
||||
info.category = "macro_name";
|
||||
if(index_terms.count(info) == 0)
|
||||
{
|
||||
std::cout << "Indexing macro " << info.term << std::endl;
|
||||
index_terms.insert(info);
|
||||
}
|
||||
++i;
|
||||
}
|
||||
}
|
||||
//
|
||||
// Now functions:
|
||||
//
|
||||
{
|
||||
static const boost::regex e(
|
||||
"\\w+\\s+(\\w+)\\s*\\([^\\)]*\\)\\s*\\{"
|
||||
);
|
||||
boost::sregex_token_iterator i(text.begin(), text.end(), e, 1), j;
|
||||
while(i != j)
|
||||
{
|
||||
index_info info;
|
||||
info.term = i->str();
|
||||
info.search_text = "\\<" + i->str() + "\\>";
|
||||
info.category = "function_name";
|
||||
if(index_terms.count(info) == 0)
|
||||
{
|
||||
std::cout << "Indexing function " << info.term << std::endl;
|
||||
index_terms.insert(info);
|
||||
}
|
||||
++i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void scan_dir(const std::string& dir, const std::string& mask, bool recurse)
|
||||
{
|
||||
using namespace boost::filesystem;
|
||||
boost::regex e(mask);
|
||||
directory_iterator i(dir), j;
|
||||
|
||||
while(i != j)
|
||||
{
|
||||
if(regex_match(i->path().filename(), e))
|
||||
{
|
||||
scan_file(i->path().directory_string().c_str());
|
||||
}
|
||||
else if(recurse && is_directory(i->status()))
|
||||
{
|
||||
scan_dir(i->path().directory_string(), mask, recurse);
|
||||
}
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
||||
std::string unquote(const std::string& s)
|
||||
{
|
||||
std::string result(s);
|
||||
if((s.size() >= 2) && (*s.begin() == '\"') && (*s.rbegin() == '\"'))
|
||||
{
|
||||
result.erase(result.begin());
|
||||
result.erase(--result.end());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void process_script(const char* script)
|
||||
{
|
||||
static const boost::regex scan_parser(
|
||||
"!scan[[:space:]]+"
|
||||
"([^\"[:space:]]+|\"(?:[^\"\\\\]|\\\\.)+\")"
|
||||
);
|
||||
static const boost::regex scan_dir_parser(
|
||||
"!scan-path[[:space:]]+"
|
||||
"([^\"[:space:]]+|\"(?:[^\"\\\\]|\\\\.)+\")"
|
||||
"[[:space:]]+"
|
||||
"([^\"[:space:]]+|\"(?:[^\"\\\\]|\\\\.)+\")"
|
||||
"(?:"
|
||||
"[[:space:]]+"
|
||||
"([^\"[:space:]]+|\"(?:[^\"\\\\]|\\\\.)+\")"
|
||||
")?"
|
||||
);
|
||||
static const boost::regex entry_parser(
|
||||
"([^\"[:space:]]+|\"(?:[^\"\\\\]|\\\\.)+\")"
|
||||
"(?:"
|
||||
"[[:space:]]+"
|
||||
"([^\"[:space:]]+|\"(?:[^\"\\\\]|\\\\.)+\")"
|
||||
"(?:"
|
||||
"[[:space:]]+"
|
||||
"([^\"[:space:]]+|\"(?:[^\"\\\\]|\\\\.)+\")"
|
||||
"(?:"
|
||||
"[[:space:]]+"
|
||||
"([^\"[:space:]]+|\"(?:[^\"\\\\]|\\\\.)+\")"
|
||||
")?"
|
||||
")?"
|
||||
")?"
|
||||
"[[:space:]]*");
|
||||
static const boost::regex rewrite_parser(
|
||||
"!(rewrite-name|rewrite-id)\\s+"
|
||||
"([^\"[:space:]]+|\"(?:[^\"\\\\]|\\\\.)+\")\\s+"
|
||||
"([^\"[:space:]]+|\"(?:[^\"\\\\]|\\\\.)+\")"
|
||||
);
|
||||
boost::smatch what;
|
||||
std::string line;
|
||||
std::ifstream is(script);
|
||||
if(is.bad())
|
||||
{
|
||||
std::cerr << "Could not open script " << script << std::endl;
|
||||
return;
|
||||
}
|
||||
while(std::getline(is, line).good())
|
||||
{
|
||||
if(regex_match(line, what, scan_parser))
|
||||
{
|
||||
std::string f = unquote(what[1].str());
|
||||
scan_file(f.c_str());
|
||||
}
|
||||
else if(regex_match(line, what, scan_dir_parser))
|
||||
{
|
||||
std::string d = unquote(what[1].str());
|
||||
std::string m = unquote(what[2].str());
|
||||
bool r = unquote(what[3].str()) == "true";
|
||||
scan_dir(d, m, r);
|
||||
}
|
||||
else if(regex_match(line, what, rewrite_parser))
|
||||
{
|
||||
bool id = what[1] == "rewrite-id";
|
||||
std::string a = unquote(what[2].str());
|
||||
std::string b = unquote(what[3].str());
|
||||
id_rewrite_list.push_back(id_rewrite_rule(a, b, id));
|
||||
}
|
||||
else if(line.compare(0, 9, "!exclude ") == 0)
|
||||
{
|
||||
static const boost::regex delim("([^\"[:space:]]+|\"(?:[^\"\\\\]|\\\\.)+\")");
|
||||
boost::sregex_token_iterator i(line.begin() + 9, line.end(), delim, 0), j;
|
||||
while(i != j)
|
||||
{
|
||||
index_info info;
|
||||
info.term = unquote(*i);
|
||||
index_terms.erase(info);
|
||||
++i;
|
||||
}
|
||||
}
|
||||
else if(regex_match(line, what, entry_parser))
|
||||
{
|
||||
// what[1] is the Index entry
|
||||
// what[2] is the regex to search for (optional)
|
||||
// what[3] is a section id that must be matched
|
||||
// in order for the term to be indexed (optional)
|
||||
// what[4] is the index category to place the term in (optional).
|
||||
index_info info;
|
||||
info.term = unquote(what.str(1));
|
||||
std::string s = unquote(what.str(2));
|
||||
if(s.size())
|
||||
info.search_text = boost::regex(s, boost::regex::icase|boost::regex::perl);
|
||||
else
|
||||
info.search_text = boost::regex("\\<" + what.str(1) + "\\>", boost::regex::icase|boost::regex::perl);
|
||||
if(what[3].matched)
|
||||
info.search_id = unquote(what.str(3));
|
||||
if(what[4].matched)
|
||||
info.category = unquote(what.str(4));
|
||||
index_terms.insert(info);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::string get_next_index_id()
|
||||
{
|
||||
static int index_id_count = 0;
|
||||
std::stringstream s;
|
||||
s << "idx_id_" << index_id_count;
|
||||
++index_id_count;
|
||||
return s.str();
|
||||
}
|
||||
|
||||
void generate_indexes()
|
||||
{
|
||||
for(boost::tiny_xml::element_list::const_iterator i = indexes.begin(); i != indexes.end(); ++i)
|
||||
{
|
||||
boost::tiny_xml::element_ptr node = *i;
|
||||
const std::string* category = find_attr(node, "type");
|
||||
bool has_title = false;
|
||||
|
||||
for(boost::tiny_xml::element_list::const_iterator k = (*i)->elements.begin(); k != (*i)->elements.end(); ++k)
|
||||
{
|
||||
if((**k).name == "title")
|
||||
{
|
||||
has_title = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
boost::tiny_xml::element_ptr navbar(new boost::tiny_xml::element());
|
||||
navbar->name = "simplelist";
|
||||
boost::tiny_xml::attribute attr;
|
||||
attr.name = "type";
|
||||
attr.value = "horiz";
|
||||
navbar->attributes.push_back(attr);
|
||||
node->elements.push_back(navbar);
|
||||
|
||||
char last_c = 0;
|
||||
boost::tiny_xml::element_ptr list(new boost::tiny_xml::element());
|
||||
list->name = "variablelist";
|
||||
boost::tiny_xml::element_ptr listentry;
|
||||
boost::tiny_xml::element_ptr listitem;
|
||||
boost::tiny_xml::element_ptr sublist;
|
||||
node->elements.push_back(list);
|
||||
|
||||
for(index_entry_set::const_iterator i = index_entries.begin(); i != index_entries.end(); ++i)
|
||||
{
|
||||
if((0 == category) || (category->size() == 0) || (category && (**i).category == *category))
|
||||
{
|
||||
if(std::toupper((**i).key[0]) != last_c)
|
||||
{
|
||||
std::string id_name = get_next_index_id();
|
||||
last_c = std::toupper((**i).key[0]);
|
||||
listentry.reset(new boost::tiny_xml::element());
|
||||
listentry->name = "varlistentry";
|
||||
boost::tiny_xml::attribute id;
|
||||
id.name = "ID";
|
||||
id.value = id_name;
|
||||
boost::tiny_xml::element_ptr term(new boost::tiny_xml::element());
|
||||
term->name = "term";
|
||||
term->content.assign(&last_c, 1);
|
||||
listentry->elements.push_front(term);
|
||||
list->elements.push_back(listentry);
|
||||
listitem.reset(new boost::tiny_xml::element());
|
||||
listitem->name = "listitem";
|
||||
sublist.reset(new boost::tiny_xml::element());
|
||||
sublist->name = "variablelist";
|
||||
listitem->elements.push_back(sublist);
|
||||
listentry->elements.push_back(listitem);
|
||||
boost::tiny_xml::element_ptr nav(new boost::tiny_xml::element());
|
||||
nav->name = "member";
|
||||
boost::tiny_xml::element_ptr navlink(new boost::tiny_xml::element());
|
||||
navlink->name = "link";
|
||||
navlink->content = term->content;
|
||||
boost::tiny_xml::attribute navid;
|
||||
navid.name = "linkend";
|
||||
navid.value = id_name;
|
||||
navlink->attributes.push_back(navid);
|
||||
nav->elements.push_back(navlink);
|
||||
navbar->elements.push_back(nav);
|
||||
}
|
||||
boost::tiny_xml::element_ptr subentry(new boost::tiny_xml::element());
|
||||
subentry->name = "varlistentry";
|
||||
boost::tiny_xml::element_ptr subterm(new boost::tiny_xml::element());
|
||||
subterm->name = "term";
|
||||
if((**i).id.empty())
|
||||
subterm->content = (**i).key;
|
||||
else
|
||||
{
|
||||
boost::tiny_xml::element_ptr link(new boost::tiny_xml::element());
|
||||
link->name = "link";
|
||||
link->content = (**i).key;
|
||||
boost::tiny_xml::attribute at;
|
||||
at.name = "linkend";
|
||||
at.value = (**i).id;
|
||||
link->attributes.push_back(at);
|
||||
subterm->elements.push_back(link);
|
||||
}
|
||||
subentry->elements.push_back(subterm);
|
||||
boost::tiny_xml::element_ptr subitem(new boost::tiny_xml::element());
|
||||
subitem->name = "listitem";
|
||||
subentry->elements.push_back(subitem);
|
||||
sublist->elements.push_back(subentry);
|
||||
|
||||
boost::tiny_xml::element_ptr secondary_list(new boost::tiny_xml::element());
|
||||
secondary_list->name = "simplelist";
|
||||
subitem->elements.push_back(secondary_list);
|
||||
|
||||
for(index_entry_set::const_iterator k = (**i).sub_keys.begin(); k != (**i).sub_keys.end(); ++k)
|
||||
{
|
||||
boost::tiny_xml::element_ptr member(new boost::tiny_xml::element());
|
||||
member->name = "member";
|
||||
boost::tiny_xml::element_ptr para(new boost::tiny_xml::element());
|
||||
para->name = "para";
|
||||
if((**k).id.empty())
|
||||
para->content = (**k).key;
|
||||
else
|
||||
{
|
||||
boost::tiny_xml::element_ptr link(new boost::tiny_xml::element());
|
||||
link->name = "link";
|
||||
boost::tiny_xml::attribute at;
|
||||
at.name = "linkend";
|
||||
at.value = (**k).id;
|
||||
link->attributes.push_back(at);
|
||||
link->content = (**k).key;
|
||||
para->elements.push_back(link);
|
||||
}
|
||||
member->elements.push_back(para);
|
||||
secondary_list->elements.push_back(member);
|
||||
}
|
||||
}
|
||||
}
|
||||
node->name = "section";
|
||||
node->attributes.clear();
|
||||
if(!has_title)
|
||||
{
|
||||
boost::tiny_xml::element_ptr t(new boost::tiny_xml::element());
|
||||
t->name = "title";
|
||||
t->content = "Index";
|
||||
node->elements.push_front(t);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::string infile, outfile;
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
if(argc < 2)
|
||||
return help();
|
||||
|
||||
//
|
||||
// Process arguments:
|
||||
//
|
||||
for(int i = 1; i < argc; ++i)
|
||||
{
|
||||
if(std::strncmp(argv[i], "in=", 3) == 0)
|
||||
{
|
||||
infile = argv[i] + 3;
|
||||
}
|
||||
else if(std::strncmp(argv[i], "out=", 4) == 0)
|
||||
{
|
||||
outfile = argv[i] + 4;
|
||||
}
|
||||
else if(std::strncmp(argv[i], "scan=", 5) == 0)
|
||||
{
|
||||
scan_file(argv[i] + 5);
|
||||
}
|
||||
else if(std::strncmp(argv[i], "script=", 7) == 0)
|
||||
{
|
||||
process_script(argv[i] + 7);
|
||||
}
|
||||
else if(std::strcmp(argv[i], "--no-duplicates") == 0)
|
||||
{
|
||||
no_duplicates = true;
|
||||
}
|
||||
else if(std::strcmp(argv[i], "--internal-index") == 0)
|
||||
{
|
||||
internal_indexes = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(infile.empty())
|
||||
{
|
||||
return help();
|
||||
}
|
||||
if(outfile.empty())
|
||||
{
|
||||
return help();
|
||||
}
|
||||
|
||||
std::ifstream is(infile.c_str());
|
||||
if(!is.good())
|
||||
{
|
||||
std::cerr << "Unable to open XML data file " << argv[1] << std::endl;
|
||||
return 1;
|
||||
}
|
||||
//
|
||||
// We need to skip any leading <? and <! elements:
|
||||
//
|
||||
std::string header = get_header(is);
|
||||
boost::tiny_xml::element_ptr xml = boost::tiny_xml::parse(is, "");
|
||||
is.close();
|
||||
|
||||
//index_terms["students_t_distribution"] = "\\<students_t_distribution\\>";
|
||||
|
||||
std::cout << "Indexing " << index_terms.size() << " terms..." << std::endl;
|
||||
|
||||
process_nodes(xml);
|
||||
|
||||
if(internal_indexes)
|
||||
generate_indexes();
|
||||
|
||||
std::ofstream os(outfile.c_str());
|
||||
os << header << std::endl;
|
||||
boost::tiny_xml::write(*xml, os);
|
||||
|
||||
return 0;
|
||||
}
|
222
src/tiny_xml.cpp
Normal file
@ -0,0 +1,222 @@
|
||||
// tiny XML sub-set tools implementation -----------------------------------//
|
||||
|
||||
// (C) Copyright Beman Dawes 2002. Distributed under the Boost
|
||||
// Software License, Version 1.0. (See accompanying file
|
||||
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
#include "tiny_xml.hpp"
|
||||
#include <cassert>
|
||||
#include <cstring>
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
void eat_whitespace( char & c, std::istream & in )
|
||||
{
|
||||
while ( c == ' ' || c == '\r' || c == '\n' || c == '\t' )
|
||||
in.get( c );
|
||||
}
|
||||
|
||||
void eat_comment( char & c, std::istream & in )
|
||||
{
|
||||
in.get(c);
|
||||
if(c != '-')
|
||||
throw std::string("Invalid comment in XML");
|
||||
in.get(c);
|
||||
if(c != '-')
|
||||
throw std::string("Invalid comment in XML");
|
||||
do{
|
||||
while(in.get(c) && (c != '-'));
|
||||
in.get(c);
|
||||
if(c != '-')
|
||||
continue;
|
||||
in.get(c);
|
||||
if(c != '>')
|
||||
continue;
|
||||
else
|
||||
break;
|
||||
}
|
||||
while(true);
|
||||
}
|
||||
|
||||
std::string get_name( char & c, std::istream & in )
|
||||
{
|
||||
std::string result;
|
||||
eat_whitespace( c, in );
|
||||
while ( std::strchr(
|
||||
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-.:", c )
|
||||
!= 0 )
|
||||
{
|
||||
result += c;
|
||||
if(!in.get( c ))
|
||||
throw std::string("xml: unexpected eof");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void eat_delim( char & c, std::istream & in,
|
||||
char delim, const std::string & msg )
|
||||
{
|
||||
eat_whitespace( c, in );
|
||||
if ( c != delim )
|
||||
throw std::string("xml syntax error, expected ") + delim
|
||||
+ " (" + msg + ")";
|
||||
in.get( c );
|
||||
}
|
||||
|
||||
std::string get_value( char & c, std::istream & in )
|
||||
{
|
||||
std::string result;
|
||||
while ( c != '\"' )
|
||||
{
|
||||
result += c;
|
||||
in.get( c );
|
||||
}
|
||||
in.get( c );
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
namespace boost
|
||||
{
|
||||
namespace tiny_xml
|
||||
{
|
||||
|
||||
// parse -----------------------------------------------------------------//
|
||||
|
||||
element_ptr parse( std::istream & in, const std::string & msg )
|
||||
{
|
||||
char c = 0; // current character
|
||||
element_ptr e( new element );
|
||||
|
||||
if(!in.get( c ))
|
||||
throw std::string("xml: unexpected eof");
|
||||
if ( c == '<' )
|
||||
if(!in.get( c ))
|
||||
throw std::string("xml: unexpected eof");
|
||||
|
||||
if(c == '!')
|
||||
{
|
||||
eat_comment(c, in);
|
||||
return e;
|
||||
}
|
||||
|
||||
e->name = get_name( c, in );
|
||||
eat_whitespace( c, in );
|
||||
|
||||
// attributes
|
||||
while ( (c != '>') && (c != '/') )
|
||||
{
|
||||
attribute a;
|
||||
a.name = get_name( c, in );
|
||||
|
||||
eat_delim( c, in, '=', msg );
|
||||
eat_delim( c, in, '\"', msg );
|
||||
|
||||
a.value = get_value( c, in );
|
||||
|
||||
e->attributes.push_back( a );
|
||||
eat_whitespace( c, in );
|
||||
}
|
||||
if(c == '/')
|
||||
{
|
||||
if(!in.get( c )) // next after '/'
|
||||
throw std::string("xml: unexpected eof");
|
||||
eat_whitespace( c, in );
|
||||
if(c != '>')
|
||||
throw std::string("xml: unexpected /");
|
||||
return e;
|
||||
}
|
||||
if(!in.get( c )) // next after '>'
|
||||
throw std::string("xml: unexpected eof");
|
||||
|
||||
//eat_whitespace( c, in );
|
||||
|
||||
do{
|
||||
// sub-elements
|
||||
while ( c == '<' )
|
||||
{
|
||||
if ( in.peek() == '/' )
|
||||
break;
|
||||
e->elements.push_back( parse( in, msg ) );
|
||||
in.get( c ); // next after '>'
|
||||
//eat_whitespace( c, in );
|
||||
}
|
||||
if (( in.peek() == '/' ) && (c == '<'))
|
||||
break;
|
||||
|
||||
// content
|
||||
if ( (c != '<') )
|
||||
{
|
||||
element_ptr sub( new element );
|
||||
while ( c != '<' )
|
||||
{
|
||||
sub->content += c;
|
||||
if(!in.get( c ))
|
||||
throw std::string("xml: unexpected eof");
|
||||
}
|
||||
e->elements.push_back( sub );
|
||||
}
|
||||
|
||||
assert( c == '<' );
|
||||
if( in.peek() == '/' )
|
||||
break;
|
||||
}while(true);
|
||||
|
||||
in.get(c);
|
||||
eat_delim( c, in, '/', msg );
|
||||
std::string end_name( get_name( c, in ) );
|
||||
if ( e->name != end_name )
|
||||
throw std::string("xml syntax error: beginning name ")
|
||||
+ e->name + " did not match end name " + end_name
|
||||
+ " (" + msg + ")";
|
||||
|
||||
eat_delim( c, in, '>', msg );
|
||||
if(c != '>')
|
||||
{
|
||||
// we've eaten one character past the >, put it back:
|
||||
if(!in.putback(c))
|
||||
throw std::string("Unable to put back character");
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
||||
// write ---------------------------------------------------------------//
|
||||
|
||||
void write( const element & e, std::ostream & out )
|
||||
{
|
||||
if(e.name.size())
|
||||
{
|
||||
out << "<" << e.name;
|
||||
if ( !e.attributes.empty() )
|
||||
{
|
||||
for( attribute_list::const_iterator itr = e.attributes.begin();
|
||||
itr != e.attributes.end(); ++itr )
|
||||
{
|
||||
out << " " << itr->name << "=\"" << itr->value << "\"";
|
||||
}
|
||||
}
|
||||
out << ">";
|
||||
}
|
||||
if ( !e.elements.empty() )
|
||||
{
|
||||
for( element_list::const_iterator itr = e.elements.begin();
|
||||
itr != e.elements.end(); ++itr )
|
||||
{
|
||||
write( **itr, out );
|
||||
}
|
||||
}
|
||||
if ( !e.content.empty() )
|
||||
{
|
||||
out << e.content;
|
||||
}
|
||||
if(e.name.size())
|
||||
{
|
||||
out << "</" << e.name << ">";
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace tiny_xml
|
||||
} // namespace boost
|
||||
|
70
src/tiny_xml.hpp
Normal file
@ -0,0 +1,70 @@
|
||||
// tiny XML sub-set tools --------------------------------------------------//
|
||||
|
||||
// (C) Copyright Beman Dawes 2002. Distributed under the Boost
|
||||
// Software License, Version 1.0. (See accompanying file
|
||||
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
// Provides self-contained tools for this XML sub-set:
|
||||
//
|
||||
// element ::= { "<" name { name "=" "\"" value "\"" } ">"
|
||||
// {element} [contents] "</" name ">" }
|
||||
//
|
||||
// The point of "self-contained" is to minimize tool-chain dependencies.
|
||||
|
||||
#ifndef BOOST_TINY_XML_H
|
||||
#define BOOST_TINY_XML_H
|
||||
|
||||
#include "boost/smart_ptr.hpp" // for shared_ptr
|
||||
#include "boost/utility.hpp" // for noncopyable
|
||||
#include <list>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
namespace boost
|
||||
{
|
||||
namespace tiny_xml
|
||||
{
|
||||
class element;
|
||||
struct attribute
|
||||
{
|
||||
std::string name;
|
||||
std::string value;
|
||||
|
||||
attribute(){}
|
||||
attribute( const std::string & name, const std::string & value )
|
||||
: name(name), value(value) {}
|
||||
};
|
||||
typedef boost::shared_ptr< element > element_ptr;
|
||||
typedef std::list< element_ptr > element_list;
|
||||
typedef std::list< attribute > attribute_list;
|
||||
|
||||
class element
|
||||
: private boost::noncopyable // because deep copy sematics would be required
|
||||
{
|
||||
public:
|
||||
std::string name;
|
||||
attribute_list attributes;
|
||||
element_list elements;
|
||||
std::string content;
|
||||
|
||||
element() {}
|
||||
explicit element( const std::string & name ) : name(name) {}
|
||||
};
|
||||
|
||||
element_ptr parse( std::istream & in, const std::string & msg );
|
||||
// Precondition: stream positioned at either the initial "<"
|
||||
// or the first character after the initial "<".
|
||||
// Postcondition: stream positioned at the first character after final
|
||||
// ">" (or eof).
|
||||
// Returns: an element_ptr to an element representing the parsed stream.
|
||||
// Throws: std::string on syntax error. msg appended to what() string.
|
||||
|
||||
void write( const element & e, std::ostream & out );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif // BOOST_TINY_XML_H
|
||||
|
||||
|
||||
|