Remove duplicate files from doclib
g0dil [Wed, 2 Sep 2009 08:06:16 +0000 (08:06 +0000)]
git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@1367 270642c3-0616-0410-b53a-bc976706d245

doclib/Doxyfile.global
doclib/DoxygenLayout.xml [deleted file]
doclib/SConscript
doclib/dot [deleted file]
doclib/dot-munge.pl [deleted file]
doclib/doxygen.sh [deleted file]
doclib/filter.pl [deleted file]
doclib/html-munge.xsl [deleted file]
doclib/tag-munge.xsl [deleted file]
site_scons/SENFSCons.py

index fa0aa5a..63881ec 100644 (file)
@@ -9,7 +9,7 @@ ALWAYS_DETAILED_SEC    = YES
 STRIP_FROM_INC_PATH    = $(TOPDIR)
 MULTILINE_CPP_IS_BRIEF = YES
 DETAILS_AT_TOP         = YES
-LAYOUT_FILE            = $(TOPDIR)/doclib/DoxygenLayout.xml
+LAYOUT_FILE            = $(TOPDIR)/site_scons/lib/DoxygenLayout.xml
 
 ALIASES                = "fixme=\xrefitem fixme \"Fix\" \"Fixmes\"" \
                          "idea=\xrefitem idea \"Idea\" \"Ideas\"" \
@@ -43,7 +43,7 @@ EXCLUDE_PATTERNS       = *.test.cc \
                          "#*#"
 EXCLUDE_SYMBOLS        = boost std
 IMAGE_PATH             = .
-INPUT_FILTER           = "$(TOPDIR)/doclib/filter.pl"
+INPUT_FILTER           = "$(TOPDIR)/site_scons/lib/filter.pl"
 
 SOURCE_BROWSER         = YES
 ALPHABETICAL_INDEX     = YES
@@ -109,7 +109,7 @@ COLLABORATION_GRAPH    = NO
 GROUP_GRAPHS           = NO
 GRAPHICAL_HIERARCHY    = NO
 DIRECTORY_GRAPH        = NO
-DOT_PATH               = "$(TOPDIR)/doclib"
+DOT_PATH               = "$(TOPDIR)/site_scons/lib"
 DOT_GRAPH_MAX_NODES    = 10
 MAX_DOT_GRAPH_DEPTH    = 5
 DOT_MULTI_TARGETS      = YES
diff --git a/doclib/DoxygenLayout.xml b/doclib/DoxygenLayout.xml
deleted file mode 100644 (file)
index 94e2cda..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-<doxygenlayout version="1.0">
-  <!-- Navigation index tabs for HTML output -->
-  <navindex>
-    <tab type="mainpage" visible="yes" title=""/>
-    <tab type="pages" visible="yes" title=""/>
-    <tab type="modules" visible="yes" title=""/>
-    <tab type="namespaces" visible="yes" title="">
-      <tab type="namespaces" visible="yes" title=""/>
-      <tab type="namespacemembers" visible="yes" title=""/>
-    </tab>
-    <tab type="classes" visible="yes" title="">
-      <tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/> 
-      <tab type="classes" visible="yes" title=""/>
-      <tab type="hierarchy" visible="yes" title=""/>
-      <tab type="classmembers" visible="yes" title=""/>
-    </tab>
-    <tab type="files" visible="yes" title="">
-      <tab type="files" visible="yes" title=""/>
-      <tab type="globals" visible="yes" title=""/>
-    </tab>
-    <tab type="dirs" visible="yes" title=""/>
-    <tab type="examples" visible="yes" title=""/>  
-  </navindex>
-
-  <!-- Layout definition for a class page -->
-  <class>
-    <briefdescription visible="yes"/>
-    <includes visible="$SHOW_INCLUDE_FILES"/>
-    <inheritancegraph visible="$CLASS_GRAPH"/>
-    <collaborationgraph visible="$COLLABORATION_GRAPH"/>
-    <allmemberslink visible="yes"/>
-    <detaileddescription title=""/>
-    <memberdecl>
-      <nestedclasses visible="yes" title=""/>
-      <publictypes title=""/>
-      <publicslots title=""/>
-      <signals title=""/>
-      <publicmethods title=""/>
-      <publicstaticmethods title=""/>
-      <publicattributes title=""/>
-      <publicstaticattributes title=""/>
-      <related title="" subtitle=""/>
-      <membergroups visible="yes"/>
-      <protectedtypes title=""/>
-      <protectedslots title=""/>
-      <protectedmethods title=""/>
-      <protectedstaticmethods title=""/>
-      <protectedattributes title=""/>
-      <protectedstaticattributes title=""/>
-      <packagetypes title=""/>
-      <packagemethods title=""/>
-      <packagestaticmethods title=""/>
-      <packageattributes title=""/>
-      <packagestaticattributes title=""/>
-      <properties title=""/>
-      <events title=""/>
-      <privatetypes title=""/>
-      <privateslots title=""/>
-      <privatemethods title=""/>
-      <privatestaticmethods title=""/>
-      <privateattributes title=""/>
-      <privatestaticattributes title=""/>
-      <friends title=""/>
-    </memberdecl>
-    <memberdef>
-      <typedefs title=""/>
-      <enums title=""/>
-      <constructors title=""/>
-      <functions title=""/>
-      <related title=""/>
-      <variables title=""/>
-      <properties title=""/>
-      <events title=""/>
-    </memberdef>
-    <usedfiles visible="$SHOW_USED_FILES"/>
-    <authorsection visible="yes"/>
-  </class>
-
-  <!-- Layout definition for a namespace page -->
-  <namespace>
-    <briefdescription visible="yes"/>
-    <detaileddescription title=""/>
-    <memberdecl>
-      <nestednamespaces visible="yes" title=""/>
-      <classes visible="yes" title=""/>
-      <typedefs title=""/>
-      <enums title=""/>
-      <functions title=""/>
-      <variables title=""/>
-      <membergroups visible="yes"/>
-    </memberdecl>
-    <memberdef>
-      <typedefs title=""/>
-      <enums title=""/>
-      <functions title=""/>
-      <variables title=""/>
-    </memberdef>
-    <authorsection visible="yes"/>
-  </namespace>
-
-  <!-- Layout definition for a file page -->
-  <file>
-    <briefdescription visible="yes"/>
-    <includes visible="$SHOW_INCLUDE_FILES"/>
-    <includegraph visible="$INCLUDE_GRAPH"/>
-    <includedbygraph visible="$INCLUDED_BY_GRAPH"/>
-    <sourcelink visible="yes"/>
-    <detaileddescription title=""/>
-    <memberdecl>
-      <classes visible="yes" title=""/>
-      <namespaces visible="yes" title=""/>
-      <defines title=""/>
-      <typedefs title=""/>
-      <enums title=""/>
-      <functions title=""/>
-      <variables title=""/>
-      <membergroups visible="yes"/>
-    </memberdecl>
-    <memberdef>
-      <defines title=""/>
-      <typedefs title=""/>
-      <enums title=""/>
-      <functions title=""/>
-      <variables title=""/>
-    </memberdef>
-    <authorsection/>
-  </file>
-
-  <!-- Layout definition for a group page -->
-  <group>
-    <briefdescription visible="yes"/>
-    <groupgraph visible="$GROUP_GRAPHS"/>
-    <detaileddescription title=""/>
-    <memberdecl>
-      <classes visible="yes" title=""/>
-      <namespaces visible="yes" title=""/>
-      <dirs visible="yes" title=""/>
-      <nestedgroups visible="yes" title=""/>
-      <files visible="yes" title=""/>
-      <defines title=""/>
-      <typedefs title=""/>
-      <enums title=""/>
-      <enumvalues title=""/>
-      <functions title=""/>
-      <variables title=""/>
-      <signals title=""/>
-      <publicslots title=""/>
-      <protectedslots title=""/>
-      <privateslots title=""/>
-      <events title=""/>
-      <properties title=""/>
-      <friends title=""/>
-      <membergroups visible="yes"/>
-    </memberdecl>
-    <memberdef>
-      <pagedocs/>
-      <defines title=""/>
-      <typedefs title=""/>
-      <enums title=""/>
-      <enumvalues title=""/>
-      <functions title=""/>
-      <variables title=""/>
-      <signals title=""/>
-      <publicslots title=""/>
-      <protectedslots title=""/>
-      <privateslots title=""/>
-      <events title=""/>
-      <properties title=""/>
-      <friends title=""/>
-    </memberdef>
-    <authorsection visible="yes"/>
-  </group>
-
-  <!-- Layout definition for a directory page -->
-  <directory>
-    <briefdescription visible="yes"/>
-    <directorygraph visible="yes"/>
-    <detaileddescription title=""/>
-    <memberdecl>
-      <dirs visible="yes"/>
-      <files visible="yes"/>
-    </memberdecl>
-  </directory>
-</doxygenlayout>
index 7831200..9a941ee 100644 (file)
@@ -256,7 +256,7 @@ env.SetDefault(
 )
 
 env.Replace(
-    DOXYGENCOM = "doclib/doxygen.sh $DOXYOPTS $SOURCE",
+    DOXYGENCOM = "site_scons/lib/doxygen.sh $DOXYOPTS $SOURCE",
 )
 
 env.Append( ENV = {
diff --git a/doclib/dot b/doclib/dot
deleted file mode 100755 (executable)
index c6bdbe4..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/bin/sh
-
-topdir="`dirname "$0"`"; topdir="`cd "$topdir/.."; pwd`"
-if head -4 "$1" | grep -q nomunge; then
-    dot "$@"
-    exit $?
-fi
-sed -i -e 's/rankdir=LR/rankdir=TB/' "$1"
-"$topdir/doclib/dot-munge.pl" "$1"
-unflatten -l2 -c2 -f -o "$1".unflat "$1"
-mv "$1".unflat "$1"
-
-case "$2" in
-    -Tpng:gd)
-    first="$1"; shift; shift
-    set -- "$first" "-Tpng" "$@"
-    ;;
-    *)
-esac
-
-set -e
-
-dot "$@"
-
-case "$4" in
-    *.png)
-    if [ -r "$4" ]; then
-        size="`pngtopnm "$4" | sed -n -e '2p'`"
-        width_a="${size% *}"
-        height_a="${size#* }"
-        if [ $width_a -gt 800 ]; then
-            for file in "${1%.dot}".*; do
-                cp "$file" "$file.a"
-            done
-            sed -e 's/rankdir=LR/rankdir=TB/' -e t -e 's/rankdir=TB/rankdir=LR/' "$1.a" > "$1"
-            dot "$@"
-            size="`pngtopnm "$4" | sed -n -e '2p'`"
-            width_b="${size% *}"
-            height_b="${size#* }"
-            if [ $width_a -lt $width_b ]; then
-                for file in "${1%.dot}".*.a; do
-                mv "$file" "${file%.a}"
-                done
-            else
-                rm "${1%.dot}".*.a
-            fi
-        fi
-    fi
-    ;;
-    *)  ;;
-esac
diff --git a/doclib/dot-munge.pl b/doclib/dot-munge.pl
deleted file mode 100755 (executable)
index 263b44e..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/perl -i -n
-
-# Reduce fontsize and change font
-s/fontsize=10/fontsize=8/g; 
-s/fontname="FreeSans.ttf"/fontname="Verdana"/g;
-
-# Wrap long labels (templates and pathnames)
-if (/label=\"([^"]{48,})\"/) {                              #"])){ # To make emacs happy ...
-    $pre=$`; 
-    $post=$';                                               #';    # To make emacs happy ...
-    $label=$1;
-
-    # Break at each komma or /
-    $label=~s{[,/]}{$&\\r\\ \\ \\ \\ \\ \\ \\ \\ }g; 
-
-    # If more than one '<' is in the label, break after each '<'
-    if (($label=~tr/</</)>1) { 
-        $label=~s/</<\\r\\ \\ \\ \\ \\ \\ \\ \\ /g;
-    }
-
-    # If at least one break is in there ...
-    if ($label=~/\\r/) {
-    # If it's a pathname, make all but the last line flush left
-    # Otherwise only make first line flush left
-    if ($label=~m{/}) {
-        $label=~s/\\r(\\ )*/\\ \\ \\ \\ \\ \\ \\ \\ \\l/g;
-        # Re-add blanks before last line
-        $label=~s/^.*\\l/$&\\ \\ \\ \\ \\ \\ \\ \\ /;
-    } else {
-        $label=~s/\\r/\\ \\ \\ \\ \\ \\ \\ \\ \\l/;
-    }
-        # Make last line flush right
-        $label.="\\r";
-    }
-    print "${pre}label=\"${label}\"${post}";
-} else { 
-    print;
-}
diff --git a/doclib/doxygen.sh b/doclib/doxygen.sh
deleted file mode 100755 (executable)
index 7061ee4..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-#!/bin/bash -e
-
-do_html_cleanup()
-{
-    sed -e 's/id="current"/class="current"/' \
-       | tidy -ascii -q --wrap 0 --show-warnings no --fix-uri no \
-       | sed -e 's/name="\([^"]*\)"\([^>]*\) id="\1"/name="\1"\2/g' \
-       | xsltproc --novalid --nonet --html --stringparam topdir "$reltopdir" \
-             "$base/html-munge.xsl" -
-}
-
-###########################################################################
-
-# Build absolute, normalized pathname
-abspath()
-{
-    case "$1" in
-       /*) echo "$1" ;;
-       *) echo "`pwd`/$1" ;;
-    esac | sed \
-       -e 's/\/\/*/\//g' \
-       -e:a \
-       -e 's/\/\.\(\/\|$\)/\1/g' \
-       -eta \
-       -e:b \
-       -e 's/\/[^\/]*\/..\(\/\|$\)/\1/' \
-       -etb \
-        -e 's/^\(\/..\)*\(\/\|$\)/\2/' \
-       -e 's/^$/\//'
-}
-
-# Create relative path from absolute directory $1 to absolute path $2
-relpath()
-{
-    local src="${1#/}"
-    local dst="${2#/}"
-    while true; do
-       if [ -z "$src" -a -z "$dst" ]; then
-           echo "Internal error in relpath()" 1>&2
-           exit 1
-       fi
-       srcd="${src%%/*}"
-       dstd="${dst%%/*}"
-       if [ "$srcd" = "$dstd" ]; then
-           src="${src#$srcd}"; src="${src#/}"
-           dst="${dst#$dstd}"; dst="${dst#/}"
-       else
-           break
-       fi
-    done
-    rel="`echo "$src" | sed -e "s/[^\/]*/../g"`/$dst" # `"
-    echo "${rel%/}"
-}
-
-# Log executed commands
-cmd()
-{
-    echo "+" "$@"
-    "$@"
-}
-
-html_cleanup()
-{
-    mv "$1" "${1}.orig"
-    do_html_cleanup <"${1}.orig" >"$1"
-}
-
-###########################################################################
-
-name="`basename "$0"`"; #`"
-base="`dirname "$0"`"; base="`cd "$base"; pwd`" #`"
-
-TEMP=`getopt -n $name -o '' -l html,tagfile,tagfile-name:,tagfiles:,output-dir:,html-dir:  -- "$@"`
-if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
-eval set -- "$TEMP"
-
-tagxsl="$base/tag-munge.xsl"
-
-html="NO"; tagfile="NO"; tagfile_name=""; tagfiles=""; output_dir="doc"; html_dir="html"
-
-while true; do
-    case "$1" in
-       --html)
-           html="YES" ; shift ;;
-       --tagfile)
-           tagfile="YES" ; shift ;;
-       --tagfile-name)
-           tagfile_name="$2"; shift 2 ;;
-       --tagfiles)
-           for f in $2; do
-               f="`abspath "$f"`" #`"
-               tagfiles="$tagfiles${tagfiles:+ }$f"
-           done
-           shift 2
-           ;;
-       --output-dir)
-           output_dir="$2"; shift 2 ;;
-       --html-dir)
-           html_dir="$2"; shift 2 ;;
-       --)
-           shift; break ;;
-       *)
-           echo "Internal error: $*"; exit 1 ;;
-    esac
-done
-
-if [ -z "$1" ]; then
-    cat <<EOF
-Usage:
-    $name
-        [--html]
-        [--tagfile]
-        [--tagfile-name=<name>]
-        [--tagfiles=<files>]
-        [--output-dir=<dir>]
-        [--html-dir=<dir>]
-            <doxyfile-or-dir>
-EOF
-    exit 1
-fi
-
-if [ "$tagfile" = "YES" -a -z "$tagfile_name" ]; then
-    echo "--tagfile-name is required with --tagfile"
-    exit 1
-fi
-
-doxydir="$1"
-
-if [ -f "$doxydir" ]; then
-    doxydir="`dirname "$doxydir"`" #`"
-fi
-
-doxydir="`abspath "$doxydir"`" #`"
-
-###########################################################################
-
-## Find $TOPDIR
-
-cd "$doxydir"
-while [ ! -r "SConstruct" -a "`pwd`" != "/" ]; do cd ..; done
-if [ ! -r "SConstruct" ]; then
-    echo "topdir not found"
-    exit 1;
-fi
-TOPDIR="`pwd`";
-reltopdir="`relpath "$doxydir/$output_dir/$html_dir" "$TOPDIR"`" #`"
-cd "$doxydir"
-
-
-## Remove tagfile_name from list of tagfiles
-
-if [ -n "$tagfile_name" ]; then
-    tagfile_name="`abspath "$output_dir/$tagfile_name"`" #`"
-    x="$tagfiles"; tagfiles=""
-    for f in $x; do
-       if [ "$f" != "$tagfile_name" ]; then
-           tagfiles="$tagfiles${tagfiles:+ }$f"
-       fi
-    done
-fi
-
-## Call doxygen proper
-
-generate_tagfile=""
-if [ "$tagfile" = "YES" ]; then
-    generate_tagfile="$tagfile_name"
-fi
-export TOPDIR html tagfile tagfile_name tagfiles output_dir html_dir generate_tagfile
-
-cmd ${DOXYGEN:-doxygen}
-
-
-## Clean up tagfile, if generated
-
-if [ "$tagfile" = "YES" ]; then
-    mv "$tagfile_name" "${tagfile_name}.orig"
-    cmd xsltproc --novalid --nonet -o "$tagfile_name" "$tagxsl" "${tagfile_name}.orig"
-fi
-
-
-## Call installdox
-
-if [ -n "$tagfiles" ]; then
-    args=""
-    for f in $tagfiles; do
-       n="`basename "$f"`" #`"
-       d="`dirname "$f"`" #`"
-       url="`relpath "$doxydir/$output_dir/$html_dir" "$d/$html_dir"`" #`"
-       args="$args${args:+ }-l $n@$url"
-    done
-
-    (
-       cd "./$output_dir/$html_dir"
-       cmd "./installdox" $args
-    )
-fi
-
-
-## Postprocess html files, if generated
-
-if [ "$html" = "YES" ]; then
-    for h in "$doxydir/$output_dir/$html_dir"/*.html; do
-       cmd html_cleanup "$h"
-    done
-fi
diff --git a/doclib/filter.pl b/doclib/filter.pl
deleted file mode 100755 (executable)
index 14ad930..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/perl -n
-
-BEGIN {
-    ($topdir=$0) =~ s{doclib/.*$}{};
-    print $topdir,"\n";
-}
-
-s/\s*$//;
-while (s/\t/' 'x(8-length($`)%8)/e) {}
-
-if (/^\s*\\code$/ .. /\\endcode/ && !/^$/) {
-    $i=length($1) if /^(\s*)\\code$/;
-    print substr($_,$i),"\n";
-} 
-elsif (s/^(\s*)<pre>$/$1<pre class="fragment">/ .. /<\/pre>/ && !/^$/) {
-    $i=length($1) if /^(\s*)<pre class="fragment">$/;
-    print substr($_,$i),"\n";
-} 
-else {
-    print $_,"\n";
-}
diff --git a/doclib/html-munge.xsl b/doclib/html-munge.xsl
deleted file mode 100644 (file)
index 5b35045..0000000
+++ /dev/null
@@ -1,509 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<xsl:stylesheet version="1.0"\r
-  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
-  xmlns:str="http://exslt.org/strings"\r
-  xmlns:set="http://exslt.org/sets"\r
-  xmlns:exslt="http://exslt.org/common"\r
-  extension-element-prefixes="str">\r
-\r
-  <xsl:output \r
-    method="html" \r
-    encoding="html" \r
-    doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"\r
-    doctype-system="http://www.w3.org/TR/html4/loose.dtd"/>\r
-\r
-  <xsl:param name="topdir" select="''"/>\r
-  \r
-  <xsl:template match="*" name="copy">\r
-    <xsl:copy>\r
-      <xsl:call-template name="copy-attributes"/>\r
-      <xsl:apply-templates/>\r
-    </xsl:copy>\r
-  </xsl:template>\r
-\r
-  <xsl:template name="copy-attributes">\r
-    <xsl:for-each select="@*">\r
-      <xsl:attribute name="{name(current())}">\r
-        <xsl:choose>\r
-          <xsl:when test="contains(current(),'@TOPDIR@')">\r
-            <xsl:value-of select="substring-before(current(),'@TOPDIR@')"/>\r
-            <xsl:value-of select="$topdir"/>\r
-            <xsl:value-of select="substring-after(current(),'@TOPDIR@')"/>\r
-          </xsl:when>\r
-          <xsl:otherwise>\r
-            <xsl:value-of select="current()"/>\r
-          </xsl:otherwise>\r
-        </xsl:choose>\r
-      </xsl:attribute>\r
-    </xsl:for-each>\r
-  </xsl:template>\r
-\r
-  <!-- Replace @TOPDIR@ with relative top directory path -->\r
-\r
-  <xsl:template match="@*[contains(current(),'@TOPDIR@')]">\r
-    <xsl:value-of select="substring-before(current(),'@TOPDIR@')"/>\r
-    <xsl:value-of select="$topdir"/>\r
-    <xsl:value-of select="substring-after(current(),'@TOPDIR@')"/>\r
-  </xsl:template>\r
-  \r
-  <!-- Add 'class' attribute  -->\r
-  \r
-  <xsl:template name="add-class">\r
-    <xsl:param name="class"/>\r
-    <xsl:copy>\r
-      <xsl:call-template name="copy-attributes"/>\r
-      <xsl:attribute name="class"><xsl:value-of select="$class"/></xsl:attribute>\r
-      <xsl:apply-templates/>\r
-    </xsl:copy>\r
-  </xsl:template>\r
-\r
-  <!-- Add '<br/>' tag after every ', ' -->\r
-  <!-- This code is not very robust, it works with the doxygen output though -->\r
-\r
-  <xsl:template name="break-comma">\r
-    <xsl:copy>\r
-      <xsl:call-template name="copy-attributes"/>\r
-      <xsl:attribute name="class">commalist</xsl:attribute>\r
-      <xsl:apply-templates mode="break-comma"/>\r
-    </xsl:copy>\r
-  </xsl:template>\r
\r
-  <xsl:template match="text()[1]" mode="break-comma">\r
-    <xsl:value-of select="current()"/><br/>\r
-  </xsl:template>\r
-\r
-  <xsl:template match="*" mode="break-comma">\r
-    <xsl:call-template name="copy"/>\r
-  </xsl:template>\r
-\r
-  <xsl:template match="text()[contains(current(),' and') or contains(current(),'and ')]" mode="break-comma" priority="1">\r
-    <xsl:value-of select="substring-before(current(),'and')"/>\r
-    <br/>\r
-    <xsl:value-of select="substring-after(current(),'and')"/>\r
-  </xsl:template>\r
-\r
-  <xsl:template match="text()[contains(current(),',')]" mode="break-comma">\r
-    <xsl:value-of select="substring-before(current(),',')"/>\r
-    <xsl:text>,</xsl:text><br/>\r
-    <xsl:value-of select="substring-after(current(),',')"/>\r
-  </xsl:template>\r
-\r
-  <!-- ====================================================================== -->\r
-\r
-  <!-- Hack Glossary menu highlight -->\r
-\r
-  <xsl:template match="div[@class='tabs menu']/ul[1]">\r
-    <xsl:choose>\r
-      <xsl:when test="//h1[.//text()='Glossary']">\r
-        <xsl:call-template name="add-class">\r
-          <xsl:with-param name="class">glossary</xsl:with-param>\r
-        </xsl:call-template>\r
-      </xsl:when>\r
-      <xsl:otherwise>\r
-        <xsl:copy>\r
-          <xsl:call-template name="copy-attributes"/>\r
-          <xsl:apply-templates/>\r
-        </xsl:copy>\r
-      </xsl:otherwise>\r
-    </xsl:choose>\r
-  </xsl:template>\r
-\r
-  <!-- Autogenerate table-of-contents for a page -->\r
-\r
-  <xsl:template match="div[@id='autotoc']">\r
-    <xsl:copy>\r
-      <xsl:call-template name="copy-attributes"/>\r
-      <h1>Contents</h1>\r
-      <ul>\r
-        <xsl:for-each select="following::h2|following::h3|following::h4">\r
-          <xsl:element name="li">\r
-            <xsl:attribute name="class">\r
-              <xsl:value-of select="concat('level_',local-name())"/>\r
-            </xsl:attribute>\r
-            <b><xsl:call-template name="section-number"/><xsl:text> </xsl:text></b>\r
-            <xsl:element name="a">\r
-              <xsl:choose>\r
-                <xsl:when test="a/@name">\r
-                  <xsl:attribute name="href">\r
-                    <xsl:value-of select="concat('#',a/@name)"/>\r
-                  </xsl:attribute>\r
-                </xsl:when>\r
-                <xsl:otherwise>\r
-                  <xsl:attribute name="href">\r
-                    <xsl:text>#autotoc-</xsl:text>\r
-                    <xsl:call-template name="section-number"/>\r
-                  </xsl:attribute>\r
-                </xsl:otherwise>\r
-              </xsl:choose>\r
-              <xsl:value-of select="string(current())"/>\r
-            </xsl:element>\r
-          </xsl:element>\r
-        </xsl:for-each>\r
-      </ul>\r
-    </xsl:copy>\r
-  </xsl:template>\r
-\r
-  <xsl:template name="section-number">\r
-    <xsl:number level="any" from="div[@id='autotoc']" count="h2"/>\r
-    <xsl:text>.</xsl:text>\r
-    <xsl:if test="self::h3|self::h4">\r
-      <xsl:number level="any" from="h2" count="h3"/>\r
-      <xsl:text>.</xsl:text>\r
-    </xsl:if>\r
-    <xsl:if test="self::h4">\r
-      <xsl:number level="any" from="h3" count="h4"/>\r
-      <xsl:text>.</xsl:text>\r
-    </xsl:if>\r
-  </xsl:template>\r
-  \r
-  <xsl:template match="h2|h3|h4">\r
-    <xsl:copy>\r
-      <xsl:call-template name="copy-attributes"/>\r
-      <xsl:choose>\r
-        <xsl:when test="preceding::div[@id='autotoc']">\r
-          <xsl:call-template name="section-number"/>\r
-          <xsl:text> </xsl:text>\r
-          <xsl:choose>\r
-            <xsl:when test="a">\r
-              <xsl:apply-templates/>\r
-            </xsl:when>\r
-            <xsl:otherwise>\r
-              <xsl:element name="a">\r
-                <xsl:attribute name="class"><xsl:text>anchor</xsl:text></xsl:attribute>\r
-                <xsl:attribute name="name">\r
-                  <xsl:text>autotoc-</xsl:text>\r
-                  <xsl:call-template name="section-number"/>\r
-                </xsl:attribute>\r
-                <xsl:apply-templates/>\r
-              </xsl:element>\r
-            </xsl:otherwise>\r
-          </xsl:choose>\r
-        </xsl:when>\r
-        <xsl:otherwise>\r
-          <xsl:apply-templates/>\r
-        </xsl:otherwise>\r
-      </xsl:choose>\r
-    </xsl:copy>\r
-  </xsl:template>\r
-\r
-  <!-- Build dia image-map from special div/span elements -->\r
-  <xsl:template match="div[@class='diamap']">\r
-    <xsl:element name="map">\r
-      <xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute>\r
-      <xsl:for-each select="span">\r
-        <xsl:if test="a">\r
-          <xsl:variable name="name" select="string(a[1])"/>\r
-          <xsl:element name="area">\r
-            <xsl:attribute name="shape">rect</xsl:attribute>\r
-            <xsl:attribute name="alt"><xsl:value-of select="$name"/></xsl:attribute>\r
-            <xsl:attribute name="title"><xsl:value-of select="$name"/></xsl:attribute>\r
-            <xsl:attribute name="href"><xsl:value-of select="a[1]/@href"/></xsl:attribute>\r
-            <xsl:attribute name="coords"><xsl:value-of select="@coords"/></xsl:attribute>\r
-          </xsl:element>\r
-        </xsl:if>\r
-      </xsl:for-each>\r
-    </xsl:element>\r
-  </xsl:template>\r
-\r
-  <!-- Reformat detailed member documentation -->\r
-\r
-  <xsl:template match="table[@class='memname']">\r
-    <xsl:variable name="name1"><xsl:value-of select="str:split(tr/td[@class='memname'],'::')[position()=last()]"/></xsl:variable>\r
-    <xsl:variable name="name2"><xsl:value-of select="str:split(tr/td[@class='memname'],' ')[position()=last()]"/></xsl:variable>\r
-    <xsl:variable name="name"><xsl:value-of select="substring($name1,string-length($name1)-string-length($name2))"/></xsl:variable>\r
-    <xsl:element name="table">\r
-      <xsl:attribute name="class">\r
-        <xsl:text>memname</xsl:text>\r
-        <xsl:if test="contains(tr/td[@class='memname'],'#define')"><xsl:text> macro</xsl:text></xsl:if>\r
-      </xsl:attribute>\r
-      <tr>\r
-        <td class="memtype" colspan="5">\r
-          <xsl:for-each select="tr/td[@class='memname']/*|tr/td[@class='memname']/text()">\r
-            <xsl:choose>\r
-              <xsl:when test="position()=last()">\r
-                <xsl:value-of select="substring(.,1,string-length(.)-string-length($name))"/>\r
-              </xsl:when>\r
-              <xsl:otherwise>\r
-                <xsl:copy-of select="."/>\r
-              </xsl:otherwise>\r
-            </xsl:choose>\r
-          </xsl:for-each>\r
-        </td>\r
-      </tr>\r
-\r
-      <xsl:choose>\r
-        <xsl:when test="tr/td[@class='paramtype']">\r
-          <tr>\r
-            <td class="memname"><xsl:copy-of select="$name"/></td>\r
-            <td class="memparen">(</td>\r
-            <xsl:copy-of select="tr[1]/td[@class='paramtype']"/>\r
-            <xsl:copy-of select="tr[1]/td[@class='paramname']"/>\r
-            <td class="memparen"><xsl:if test="not(tr[td[@class='paramkey']])">)</xsl:if></td>\r
-          </tr>\r
-\r
-          <xsl:for-each select="tr[td[@class='paramkey']]">\r
-            <tr>\r
-              <td class="memname"></td>\r
-              <td class="memparen"></td>\r
-              <xsl:copy-of select="td[@class='paramtype']"/>\r
-              <xsl:copy-of select="td[@class='paramname']"/>\r
-              <td class="memparen"><xsl:if test="position()=last()">)</xsl:if></td>\r
-            </tr>\r
-          </xsl:for-each>\r
-        </xsl:when>\r
-        <xsl:otherwise>\r
-          <tr>\r
-            <td class="memname"><xsl:copy-of select="$name"/></td>\r
-            <td class="memparen"><xsl:if test="tr/td[.='(']">()</xsl:if></td>\r
-            <td class="paramtype"></td>\r
-            <td class="paramname"></td>\r
-            <td class="memparen"></td>\r
-          </tr>\r
-        </xsl:otherwise>\r
-      </xsl:choose>\r
-      <tr>\r
-        <td colspan="5" class="memattrs"><xsl:copy-of select="tr/td[@width='100%']/*|tr/td[@width='100%']/text()"/></td>\r
-      </tr>\r
-    </xsl:element>\r
-  </xsl:template>\r
-\r
-  <!-- no idea, where these &nbsp;'s come frome ... -->\r
-  <xsl:template match="div[@class='memproto']/text()[.='&#160;&#x0a;']">\r
-  </xsl:template>\r
-\r
-  <!-- Add grouping to all-members page -->\r
-\r
-  <xsl:template match="table[preceding-sibling::h1[1][contains(text(),'Member List')]]">\r
-    <table class="allmembers">\r
-\r
-      <!-- We need to filter the table rows by looking for indications on the object type       -->\r
-      <!-- The table has 3 acolumns:                                                            -->\r
-      <!--    td[1] is the name of the object,                                                  -->\r
-      <!--    td[2] is the name of the class the object is defined in                           -->\r
-      <!--    td[3] contains additional flags                                                   -->\r
-      <!--                                                                                      -->\r
-      <!-- The conditions we have are:                                                          -->\r
-      <!--                                                                                      -->\r
-      <!--    contains(td[3],'static')        static member (variable or function)              -->\r
-      <!--    contains(td[3],'protected')     protected member of arbitrary type                -->\r
-      <!--    contains(td[3],'private')       private member of arbitrary type                  -->\r
-      <!--    contains(td{3],'friend')        friend declaration (function or class)            -->\r
-      <!--    contains(td[3],'pure virtual')  entry is a pure-virtual member function           -->\r
-      <!--    starts-with(td[1]/text(),'(')   function entry (member, static or friend)         -->\r
-      <!--    contains(td[1], 'typedef')      entry is a typdef                                 -->\r
-      <!--    contains(td[1], 'enum ')        entry is enum type or enumerator                  -->\r
-      <!--    contains(td[1], 'enum name')    entry is the name of an enum type                 -->\r
-      <!--    contains(td[1], 'enum value')   entry is an enumerator value                      -->\r
-      <!--    str:split(substring-before(concat(td[2]/a,'&lt;'),'&lt;'),'::')[position()=last()]==string(td[1]/a) -->\r
-      <!--                                    entry is a constructor                            -->\r
-      <!--    not(starts-with(td[1]/a,'~'))   entry is a destructor                             -->\r
-\r
-      <xsl:variable name="public-static-memfn">\r
-        <xsl:apply-templates select="tr[contains(td[3],'static')][not(contains(td[3],'protected'))][not(contains(td[3],'private'))][not(contains(td[3],'friend'))][starts-with(td[1]/text(),'(')]"/>\r
-      </xsl:variable>\r
-      <xsl:if test="string($public-static-memfn)">\r
-        <tr><td colspan="3"><h2>Static Public Member Functions</h2></td></tr>\r
-        <xsl:copy-of select="$public-static-memfn"/>\r
-      </xsl:if>\r
-\r
-      <xsl:variable name="public-static-var">\r
-        <xsl:apply-templates select="tr[not(contains(td[1],'typedef'))][contains(td[3],'static')][not(contains(td[3],'protected'))][not(contains(td[3],'private'))][not(starts-with(td[1]/text(),'('))]"/>\r
-      </xsl:variable>\r
-      <xsl:if test="string($public-static-var)">\r
-        <tr><td colspan="3"><h2>Static Public Attributes</h2></td></tr>\r
-        <xsl:copy-of select="$public-static-var"/>\r
-      </xsl:if>\r
-      \r
-      <xsl:variable name="public-memfn">\r
-        <xsl:apply-templates select="tr[not(contains(td[1],'typedef'))][not(contains(td[3],'static'))][not(contains(td[3],'protected'))][not(contains(td[3],'private'))][not(contains(td[3],'friend'))][starts-with(td[1]/text(),'(')][str:split(substring-before(concat(td[2]/a,'&lt;'),'&lt;'),'::')[position()=last()]!=string(td[1]/a)][not(starts-with(td[1]/a,'~'))][not(contains(td[3],'pure virtual'))]"/>\r
-      </xsl:variable>\r
-      <xsl:if test="string($public-memfn)">\r
-        <tr><td colspan="3"><h2>Public Member Functions</h2></td></tr>\r
-        <xsl:copy-of select="set:distinct(exslt:node-set($public-memfn)/tr)"/>\r
-      </xsl:if>\r
-\r
-      <xsl:variable name="public-var">\r
-        <xsl:apply-templates select="tr[not(contains(td[1],'typedef'))][not(contains(td[1],'enum '))][not(contains(td[3],'static'))][not(contains(td[3],'protected'))][not(contains(td[3],'private'))][not(starts-with(td[1]/text(),'('))]"/>\r
-      </xsl:variable>\r
-      <xsl:if test="string($public-var)">\r
-        <tr><td colspan="3"><h2>Public Attributes</h2></td></tr>\r
-        <xsl:copy-of select="$public-var"/>\r
-      </xsl:if>\r
-      \r
-      <xsl:variable name="public-enum">\r
-        <xsl:apply-templates select="tr[contains(td[1],'enum value')][not(contains(td[3],'protected'))][not(contains(td[3],'private'))]"/>\r
-      </xsl:variable>\r
-      <xsl:if test="string($public-enum)">\r
-        <tr><td colspan="3"><h2>Public Enumerators</h2></td></tr>\r
-        <xsl:copy-of select="$public-enum"/>\r
-      </xsl:if>\r
-      \r
-      <xsl:variable name="public-type">\r
-        <xsl:apply-templates select="tr[contains(td[1],'typedef') or contains(td[1],'enum name')][not(contains(td[3],'protected'))][not(contains(td[3],'private'))][not(contains(td[3],'friend'))]"/>\r
-      </xsl:variable>\r
-      <xsl:if test="string($public-type)">\r
-        <tr><td colspan="r"><h2>Public Types</h2></td></tr>\r
-        <xsl:copy-of select="$public-type"/>\r
-      </xsl:if>\r
-      \r
-      <xsl:variable name="non-public">\r
-        <xsl:apply-templates select="tr[contains(td[3],'protected') or contains(td[3],'private') or contains(td[3],'friend')][str:split(substring-before(concat(td[2]/a,'&lt;'),'&lt;'),'::')[position()=last()]!=string(td[1]/a)][not(starts-with(td[1]/a,'~'))][not(contains(td[3],'pure virtual'))]"/>\r
-      </xsl:variable>\r
-      <xsl:if test="string($non-public)">\r
-        <tr><td colspan="3"><h2>Non-Public Members</h2></td></tr>\r
-        <xsl:copy-of select="$non-public"/>\r
-      </xsl:if>\r
-\r
-    </table>\r
-  </xsl:template>\r
-\r
-  <xsl:template match="table[preceding-sibling::h1[1][contains(text(),'Member List')]]/tr/td[2]/a/text()[contains(.,'&lt;')]">\r
-    <!-- this removes the template args form the second column to make the table more compact -->\r
-    <xsl:value-of select="substring-before(.,'&lt;')"/>\r
-  </xsl:template>\r
-\r
-  <xsl:template match="table[preceding-sibling::h1[1][contains(text(),'Member List')]]/tr/td[1]/a/text()[contains(.,'::')]">\r
-    <!-- for some weird reason, some members have a fully qualified name in the first column -->\r
-    <!-- remove the qualification here -->\r
-    <xsl:value-of select="str:split(.,'::')[position()=last()]"/>\r
-  </xsl:template>\r
-\r
-  <!-- Remove the automatically inserted search form (we build our own) -->\r
-  <xsl:template match="li[form]"> \r
-  </xsl:template>\r
-\r
-  <!-- Add CSS class to alphabetical class index table -->\r
-  <xsl:template match="table[preceding-sibling::*[1][self::div][@class='qindex']]">\r
-    <xsl:call-template name="add-class">\r
-      <xsl:with-param name="class">qindextable</xsl:with-param>\r
-    </xsl:call-template>\r
-  </xsl:template>\r
-\r
-  <!-- Add CSS class to special paragraphs -->\r
-\r
-  <xsl:template match="dl[dt/b/a/text()='Bug:']">\r
-    <xsl:call-template name="add-class">\r
-      <xsl:with-param name="class">xref-bug</xsl:with-param>\r
-    </xsl:call-template>\r
-  </xsl:template>\r
-\r
-  <xsl:template match="dl[dt/b/a/text()='Fix:']">\r
-    <xsl:call-template name="add-class">\r
-      <xsl:with-param name="class">xref-fix</xsl:with-param>\r
-    </xsl:call-template>\r
-  </xsl:template>\r
-\r
-  <xsl:template match="dl[dt/b/a/text()='Todo:']">\r
-    <xsl:call-template name="add-class">\r
-      <xsl:with-param name="class">xref-todo</xsl:with-param>\r
-    </xsl:call-template>\r
-  </xsl:template>\r
-\r
-  <xsl:template match="dl[dt/b/a/text()='Idea:']">\r
-    <xsl:call-template name="add-class">\r
-      <xsl:with-param name="class">xref-idea</xsl:with-param>\r
-    </xsl:call-template>\r
-  </xsl:template>\r
-\r
-  <xsl:template match="dl[dt/b/text()='Parameters:']|dl[dt/b/text()='Template Parameters:']">\r
-    <xsl:call-template name="add-class">\r
-      <xsl:with-param name="class">parameters</xsl:with-param>\r
-    </xsl:call-template>\r
-  </xsl:template>\r
-\r
-  <xsl:template match="dl[dt/b/text()='Implementation note:']">\r
-    <xsl:call-template name="add-class">\r
-      <xsl:with-param name="class">implementation</xsl:with-param>\r
-    </xsl:call-template>\r
-  </xsl:template>\r
-\r
-  <xsl:template match="p[starts-with(text(),'Definition at line ')]">\r
-    <xsl:call-template name="add-class">\r
-      <xsl:with-param name="class">sourceline</xsl:with-param>\r
-    </xsl:call-template>\r
-  </xsl:template>\r
-\r
-  <xsl:template match="div[@class='memdoc']/p[starts-with(text(),'References ')]">\r
-    <xsl:call-template name="add-class">\r
-      <xsl:with-param name="class">references</xsl:with-param>\r
-    </xsl:call-template>\r
-  </xsl:template>\r
-\r
-  <xsl:template match="div[@class='memdoc']/p[starts-with(text(),'Referenced by ')]">\r
-    <xsl:call-template name="add-class">\r
-      <xsl:with-param name="class">referencedby</xsl:with-param>\r
-    </xsl:call-template>\r
-  </xsl:template>\r
-\r
-  <xsl:template match="div[@class='memdoc']/p[starts-with(text(),'Reimplemented from ')]">\r
-    <xsl:call-template name="add-class">\r
-      <xsl:with-param name="class">reimplementedfrom</xsl:with-param>\r
-    </xsl:call-template>\r
-  </xsl:template>\r
-\r
-  <xsl:template match="div[@class='memdoc']/p[starts-with(text(),'Reimplemented in ')]">\r
-    <xsl:call-template name="add-class">\r
-      <xsl:with-param name="class">reimplementedin</xsl:with-param>\r
-    </xsl:call-template>\r
-  </xsl:template>\r
-\r
-  <xsl:template match="div[@class='memdoc']/p[starts-with(text(),'Implemented in ')]">\r
-    <xsl:call-template name="add-class">\r
-      <xsl:with-param name="class">implementedin</xsl:with-param>\r
-    </xsl:call-template>\r
-  </xsl:template>\r
-\r
-  <!-- Break the following lists after each komma -->\r
-\r
-  <xsl:template match="p[starts-with(text(),'Inherited by ')]">\r
-    <xsl:call-template name="break-comma"/>\r
-  </xsl:template>\r
-\r
-  <xsl:template match="p[starts-with(text(),'Inherits ')]">\r
-    <xsl:call-template name="break-comma"/>\r
-  </xsl:template>\r
-\r
-  <!-- Add CSS class to the member overview table of a class documentation -->\r
-  <xsl:template match="table[descendant::td[@class='memItemLeft']]">\r
-    <xsl:call-template name="add-class">\r
-      <xsl:with-param name="class">members</xsl:with-param>\r
-    </xsl:call-template>\r
-  </xsl:template>\r
-\r
-  <!-- Add CSS class to literal links (links, where link text and href attribute are the same -->\r
-  <xsl:template match="a[@href=string(current())]" priority="1">\r
-    <xsl:call-template name="add-class">\r
-      <xsl:with-param name="class">literal</xsl:with-param>\r
-    </xsl:call-template>\r
-  </xsl:template>\r
-\r
-  <!-- Add CSS class to external links -->\r
-  <xsl:template match="a[contains(@href,'http://')]">\r
-    <xsl:call-template name="add-class">\r
-      <xsl:with-param name="class">ext</xsl:with-param>\r
-    </xsl:call-template>\r
-  </xsl:template>\r
-\r
-  <!-- Add CSS class to anchor-only links -->\r
-  <xsl:template match="a[not(@href)]">\r
-    <xsl:call-template name="add-class">\r
-      <xsl:with-param name="class">anchor</xsl:with-param>\r
-    </xsl:call-template>\r
-  </xsl:template>\r
-\r
-  <!-- Add CSS class to the brief documentation paragraph of the member documentation -->\r
-  <xsl:template match="div[@class='memdoc']/p[1][not(contains(.,'Definition at line'))]">\r
-    <xsl:call-template name="add-class">\r
-      <xsl:with-param name="class">memtitle</xsl:with-param>\r
-    </xsl:call-template>\r
-  </xsl:template>\r
-\r
-  <!-- Remove external items from the namespace index -->\r
-  <xsl:template match="div[@id='content2']/table[contains(preceding-sibling::h1/text(),'Namespace Reference')]/tr[td[@class='memItemRight']/a[1][@class='elRef'][@doxygen]]">\r
-  </xsl:template>\r
-  \r
-  <!-- Remove [external] references from the modules page -->\r
-  <xsl:template match="div[@id='content2']/ul/li[a/@class='elRef'][a/@doxygen][code/text()='[external]'][not(ul)]">\r
-  </xsl:template>\r
-\r
-</xsl:stylesheet>\r
diff --git a/doclib/tag-munge.xsl b/doclib/tag-munge.xsl
deleted file mode 100644 (file)
index 67f1f3d..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>\r
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
-                version="1.0">\r
-  \r
-  <xsl:output method="xml"/>\r
-    \r
-  <xsl:template match="compound[@kind='namespace']">\r
-  </xsl:template>\r
-\r
-  <xsl:template match="*">\r
-    <xsl:copy>\r
-      <xsl:for-each select="@*"><xsl:copy/></xsl:for-each>\r
-      <xsl:apply-templates/>\r
-    </xsl:copy>\r
-  </xsl:template>\r
-\r
-</xsl:stylesheet>\r
index fc26296..88fa5e5 100644 (file)
@@ -23,8 +23,8 @@ def Glob(env, exclude=[], subdirs=[]):
 
 def Doxygen(env, doxyfile = "Doxyfile", extra_sources = []):
     # There is one small problem we need to solve with this builder: The Doxygen builder reads
-    # the Doxyfile and thus depends on the environment variables set by doclib/doxygen.sh. We
-    # thus have to provide all necessary definitions here manually via DOXYENV !
+    # the Doxyfile and thus depends on the environment variables set by site_scons/lib/doxygen.sh.
+    # We thus have to provide all necessary definitions here manually via DOXYENV !
 
     if type(doxyfile) is type(""):
         doxyfile = env.File(doxyfile)
@@ -47,8 +47,8 @@ def Doxygen(env, doxyfile = "Doxyfile", extra_sources = []):
                                            'generate_tagfile': 'doc/${MODULE}.tag' },
                               MODULE   = module )
         env.Append(ALL_TAGFILES = [ tagfile[0].abspath ])
-        env.Depends(tagfile, [ env.File('#/doclib/doxygen.sh'), 
-                               env.File('#/doclib/tag-munge.xsl') ])
+        env.Depends(tagfile, [ env.File('#/site_scons/lib/doxygen.sh'), 
+                               env.File('#/site_scons/lib/tag-munge.xsl') ])
 
         env.Install(env.Dir('$DOCINSTALLDIR').Dir(tagfile[0].dir.get_path(env.Dir('#'))),
                     tagfile[0])
@@ -64,8 +64,8 @@ def Doxygen(env, doxyfile = "Doxyfile", extra_sources = []):
                                    'output_dir'      : 'doc',
                                    'html_dir'        : 'html',
                                    'html'            : 'YES' } )
-    env.Depends(doc, [ env.File('#/doclib/doxygen.sh'),
-                       env.File('#/doclib/html-munge.xsl') ])
+    env.Depends(doc, [ env.File('#/site_scons/lib/doxygen.sh'),
+                       env.File('#/site_scons/lib/html-munge.xsl') ])
 
     # Copy the extra_sources (the images) into the documentation directory
     # (need to exclude the 'clean' case otherwise there are multiple ways to clean the copies)