You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by pq...@apache.org on 2009/10/03 18:20:35 UTC

svn commit: r821352 [2/34] - /httpd/site/trunk/docs/dev/apidoc/

Added: httpd/site/trunk/docs/dev/apidoc/APIdict.pm
URL: http://svn.apache.org/viewvc/httpd/site/trunk/docs/dev/apidoc/APIdict.pm?rev=821352&view=auto
==============================================================================
--- httpd/site/trunk/docs/dev/apidoc/APIdict.pm (added)
+++ httpd/site/trunk/docs/dev/apidoc/APIdict.pm Sat Oct  3 16:20:11 2009
@@ -0,0 +1,1037 @@
+package APIdict;
+#
+# Package to deal with API documentation defined by entries in a flat
+# editable file.
+#
+# Edit history:
+#
+#  2001-07-19 Ken Coar
+#	Add the ability to write the dictionary (sans comments) to
+#	an XML file.  The DTD to which we are hewing is still
+#	unpublished.
+#
+#  2001-06-19 Ken Coar
+#	Added some documentation, and added xref-counts to the stats result.
+#
+#  2001-05-04 Ken Coar
+#	Add 'hyperlink' Boolean setting.
+#
+#  2000-09-15 Ken Coar
+#	Pull the relevant parts out of the mkapidict script so that
+#	other tools can use them (like a source scanner).
+#
+#	This is the first Perl 'module' I've written, so be gentle..
+#
+
+use HTML::Entities;
+use POSIX;
+
+#
+# Public methods
+#
+
+$hyperlinks = 1;
+$embed = 1;
+
+#
+# Package constructor
+#
+#   $dict = new APIdict [('dictionary-file')];
+#
+sub new {
+    my($self) = bless {}, shift;
+    $self->init(@_);
+    $self;
+}
+
+#
+# All other public methods appear in lexical order.
+#
+
+#
+# Replace $a_text with whatever to which it links.
+sub insert_link {
+    my($self, $a_text, $prefix, $postfix, $a_target, $ml) = @_;
+    my($ref);
+    my($xml) = ($ml =~ /xml/i);
+
+    #
+    # This is an incredibly brute-force O(n^2) algorithm, but at least it's
+    # clear and only run when updating the docco.
+    #
+    if (! $a_target) {
+        $a_target = $a_text;
+    }
+    if ($hyperlinks) {
+        if ($xml) {
+            $ref = "<ref>$a_text</ref>";
+        }
+        else {
+            $ref = "<a href=\"$a_target\">$prefix$a_text$postfix</a>";
+        }
+    }
+    else {
+        $ref = "$prefix$a_text$postfix";
+    }
+    return $ref;
+}
+
+#
+# Turn any inline references to other entities into links.
+#
+sub add_links {
+    my($self, $wip, $rname, $a_prefix, $a_postfix, $ml, %HREF) = @_;
+    my($ref);
+
+    #
+    # This is an incredibly brute-force O(n^2) algorithm, but at least it's
+    # clear and only run when updating the docco.
+    #
+    foreach $ref (keys(%Entity)) {
+	local($href) = $HREF{"$ref"};
+	$href = ($href ? "$href" : "apidoc_$ref.html");
+	if ($ref ne $rname) {
+            $nref = &insert_link($self, $ref, $prefix, $postfix, $href, $ml);
+            $wip =~ s:([^-</]*)\b$ref\b:$1$nref:g;
+	}
+    }
+    return $wip;
+}
+
+#
+# Return the one-character category (type) of the specified entity.
+#
+sub category {
+    my($self, $item) = @_;
+    my($rtype);
+
+    if (! $Entity{$item}) {
+        return undef;
+    }
+    ($rtype) = split(m:\|:, $Entity{$item});
+    return uc($rtype);
+}
+
+#
+# Return the human-readable name of a category (such as 'Routine' or
+# 'Constant').
+#
+sub category_name {
+    my($self, $prefix) = @_;
+
+    return $Prefix{uc($prefix)};
+}
+
+#
+# Return an unsorted array of the names of defined 'cell' entities.
+#
+sub cell_list {
+    my($self, $item) = @_;
+
+    return keys(%Cell);
+}
+
+#
+# Save the dictionary to the specified file, which may or may not
+# be the same as the original one read.
+#
+sub checkpoint {
+    my($self) = @_;
+
+    return &writefile($self, $DictFile);
+}
+
+#
+# Return an unsorted array of the names of defined constant entities.
+#
+sub constant_list {
+    my($self, $item) = @_;
+
+    return keys(%Constant);
+}
+
+#
+# Check to see if the specified name is in the dictionary.
+#
+sub defined {
+    my($self, $item) = @_;
+
+    return exists($Entity{$item});
+}
+
+#
+# Methods for defining new entries.
+#
+sub define_cell {
+    my($self, @args) = @_;
+
+    return &make_entry('D', @args);
+}
+
+sub define_constant {
+    my($self, @args) = @_;
+
+    return &make_entry('C', @args);
+}
+
+sub define_macro {
+    my($self, @args) = @_;
+
+    return &make_entry('M', @args);
+}
+
+sub define_routine {
+    my($self, @args) = @_;
+
+    return &make_entry('R', @args);
+}
+
+sub define_structure {
+    my($self, @args) = @_;
+
+    return &make_entry('S', @args);
+}
+
+sub define_xref {
+    my($self, @args) = @_;
+
+    return &make_entry('X', @args);
+}
+
+#
+# Methods for returning aspects of an entry.
+#
+
+sub definition {
+    my($self, $item) = @_;
+
+    return $Definition{$item};
+}
+
+sub description {
+    my($self, $item) = @_;
+
+    return $Description{$item};
+}
+
+sub description_file {
+    my($self, $item) = @_;
+
+    return $Description_file{$item};
+}
+
+#
+# Simply return the raw dictionary.
+#
+sub dictionary {
+    return join("", @Dictionary);
+}
+
+#
+# Return an unsorted array of the names of all defined entities,
+# irrespective of their categories/types.
+#
+sub entity_list {
+    my($self, $item) = @_;
+
+    return keys(%Entity);
+}
+
+sub example {
+    my($self, $item) = @_;
+
+    return $Example{$item};
+}
+
+sub see_also {
+    my($self, $item) = @_;
+
+    return $SeeAlso{$item};
+}
+
+#
+# Expand any xref references in a see-also list.
+#
+sub expanded_seealso {
+    my($self, $item) = @_;
+    my($work, $ref) = ("", $SeeAlso{$item});
+    my(@in, @result);
+    my(%items);
+
+    @in = split(m:,:, $ref);
+    foreach (@in) {
+        push(@result, &references($_, $item));
+    }
+    #
+    # Sort the results and weed out any duplicates.  Use the associative
+    # array properties to do the work for us.
+    #
+    foreach (@result) {
+        $items{"$_"} = 1;
+    }
+    delete($items{"$item"});
+    @result = sort {uc($a) cmp uc($b)} (keys(%items));
+    return @result;
+}
+
+#
+# Enable/disable the use of hyperlinks in add_links.
+#
+sub hyperlinks {
+    my($self, $setting) = @_;
+
+    if ($setting != undef) {
+        $hyperlinks = $setting;
+    }
+    return $hyperlinks;
+}
+
+#
+# Enable/disable the embedding of the separate description files.
+#
+sub embed_descriptions {
+    my($self, $setting) = @_;
+
+    if (defined $setting) {
+        $embed = $setting;
+    }
+    return $embed;
+}
+
+#
+# Boolean checks for entity types.
+#
+sub is_cell {
+    my($self, $item) = @_;
+
+    return exists($Cell{$item});
+}
+
+sub is_constant {
+    my($self, $item) = @_;
+
+    return exists($Constant{$item});
+}
+
+sub is_macro {
+    my($self, $item) = @_;
+
+    return exists($Macro{$item});
+}
+
+sub is_routine {
+    my($self, $item) = @_;
+
+    return exists($Routine{$item});
+}
+
+sub is_structure {
+    my($self, $item) = @_;
+
+    return exists($Structure{$item});
+}
+
+sub is_xref {
+    my($self, $item) = @_;
+
+    return exists($Xref{$item});
+}
+
+#
+# Public methods for returning the lists of entries.
+#
+sub macro_list {
+    my($self, $item) = @_;
+
+    return keys(%Macro);
+}
+
+sub routine_list {
+    my($self, $item) = @_;
+
+    return keys(%Routine);
+}
+
+sub xref_list {
+    my($self, $item) = @_;
+
+    return keys(%Xref);
+}
+
+sub structure_list {
+    my($self, $item) = @_;
+
+    return keys(%Structure);
+}
+
+#
+# Create a unique item name.  This seems weird for a dictionary, but it
+# allows the module to be used to record the same information about other
+# types of things, such as error messages.  Of course, this doesn't actually
+# add the item to the dictionary; the caller has to do that separately.
+# That should probably be the next step aftet this, to avoid something
+# else being added with this name.
+#
+sub make_item {
+    my($self, $text, $prefix) = @_;
+    my($item, $counter, $length) = ("", 0, 16);
+
+    $text =~ s:\W+::g;
+    $item = $prefix . uc($text);
+    do {
+        $item = substr($item, 0, $length)
+            . ($counter ? snprintf("%02d", $counter) : "");
+        $counter++;
+        $length = 14;
+    } until (! &defined($self, $item));
+    return $item;
+}
+    
+#
+# Read a dictionary file and load the arrays.
+#
+sub readfile {
+    my($self, $dictfile) = @_;
+    my($dir);
+    my($rtype);
+    local($DataLine) = 0;
+    local($RecordNum) = 0;
+    local($Continuing) = 0;
+
+    $DictFile = $dictfile;
+    #
+    # If the dictionary file doesn't exist, assume we're creating a
+    # new one and just saving the name for later writing/checkpointing.
+    #
+    if (! -r $dictfile) {
+        return 1;
+    }
+    #
+    # If the dictionary exists and we can't open it, though, that's
+    # a problem.
+    #
+    open *DICTFILE, "<$dictfile"
+        || die("Can't open dictionary file $dictfile");
+
+    while (! eof(*DICTFILE)) {
+        local(@field) = ("", "", "", "", "", "", "", "");
+        local($rec);
+
+        $rec = &get_record(1);
+        next if (! $rec);
+        chomp($rec);
+        @field = split(m:\|:, $rec);
+        $rec =~ s:\$\*:$field[1]:g;
+        @field = split(m:\|:, $rec, -1);
+        if ($#field != 5) {
+            if ($#field < 5) {
+                $dir = "few";
+            }
+            else {
+                $dir = "many";
+            }
+            print STDERR "Too $dir fields (" . ($#field + 1)
+                . " instead of 6) for record $RecordNum at "
+                . "line $DataLine\n";
+        }
+        if ($field[0] !~ m:^[$prefix_chars]$:i) {
+            print STDERR "Unrecognised record identifier /$field[0]/ "
+                . "for record ending on line $DataLine;\n"
+                . "\tmissing continuation character?\n";
+            next;
+        }
+        if ($Entity{$field[1]}) {
+            print STDERR "Item $field[1] redefined at line $DataLine.\n";
+        }
+        $Entity{$field[1]} = $rec;
+        $Name{$field[1]} = $field[1];
+        $rtype = uc(substr($field[0], 0, 1));
+        $Rtype{$field[1]} = $rtype;
+        if ($rtype eq 'R') {
+            $Routine{$field[1]} = $rec;
+        }
+        elsif ($rtype eq 'M') {
+            $Macro{$field[1]} = $rec;
+        }
+        elsif ($rtype eq 'S') {
+            $Structure{$field[1]} = $rec;
+        }
+        elsif ($rtype eq 'C') {
+            $Constant{$field[1]} = $rec;
+        }
+        elsif ($rtype eq 'D') {
+            $Cell{$field[1]} = $rec;
+        }
+        elsif ($rtype eq 'X') {
+            $Xref{$field[1]} = $field[2];
+        }
+        if ($rtype =~ /M|R/) {
+            $Callable{$field[1]} = $rec;
+        }
+        $Definition{$field[1]} = $field[2];
+        $rDefinition{$field[2]} = $field[1];
+        $Example{$field[1]} = $field[3];
+        if ($rtype ne 'X') {
+            $SeeAlso{$field[1]} = $field[4];
+            $Description{$field[1]} = $field[5];
+            $Description_file{$field[1]} = "";
+            if ($field[5] =~ m:^<(.*):) {
+                my($fname) = $1;
+                $Description_file{$field[1]} = $1;
+                $fname =~ s:\$\*:$field[1]:g;
+                if (-r $fname) {
+                    open *DFILE, "<$fname";
+                    $Description{$field[1]} = join("", <DFILE>);
+                    close DFILE;
+                }
+                else {
+                    $Description{$field[1]} = "";
+                }
+            }
+        }
+    }
+}
+
+#
+# Return statistics about the dictionary.  The return value is an
+# associative array with the following keys:
+#
+#   "entries"
+#   "routines"
+#   "cells"
+#   "lines"
+#   "macros"
+#   "structures"
+#   "constants"
+#   "reference_lists"
+#
+sub statistics {
+    my(@counter, %stats) = ();
+
+    @counter = keys(%Entity);
+    $stats{"entries"} = $#counter + 1;
+    @counter = keys(%Macro);
+    $stats{"macros"} = $#counter + 1;
+    @counter = keys(%Constant);
+    $stats{"constants"} = $#counter + 1;
+    @counter = keys(%Routine);
+    $stats{"routines"} = $#counter + 1;
+    @counter = keys(%Cell);
+    $stats{"cells"} = $#counter + 1;
+    @counter = keys(%Structure);
+    $stats{"structures"} = $#counter + 1;
+    @counter = keys(%Xref);
+    $stats{"reference_lists"} = $#counter + 1;
+    $stats{"lines"} = $#Dictionary + 1;
+    return %stats;
+}
+
+#
+# Perform repair editing on a description
+#
+sub repair_desc {
+    my($self, $desc) = @_;
+    my($last) = $desc . " ";
+    my($count) = 0;
+    my($i, $inpara);
+    my(@paras, @in, @out, $line);
+
+    $desc = "<para>" . encode_entities(decode_entities($desc)) . "</para>";
+    #
+    # Convert the newlines to something that does not have special RE
+    # significance.
+    #
+    $desc =~ s:\n:\001:gs;
+    $desc =~ s:^\s+::g;
+    $desc =~ s:\s+$::g;
+    $desc =~ s:\s+\001:\001:g;
+
+    #
+    # Normalise the para tags to the start of the line.
+    #
+    $desc =~ s:(<para>):\001$1\001:gsi;
+    $desc =~ s:(</para>):\001$1\001:gsi;
+
+    #
+    # Get rid of blanks..
+    #
+    $desc =~ s:\001\s*\001:\001:g;
+
+    #
+    # Turn <p>s into <para>s
+    #
+    $desc =~ s:\&lt;([/]*)[Pp]\&gt;:<${1}para>:gs;
+
+    #
+    # Now walk through the lines.
+    #
+    $inpara = 0;
+    @in = split(m:\001:, $desc);
+
+    foreach (@in) {
+        if (! $_) {
+            next;
+        }
+        if (m:<para>:) {
+            if ($inpara) {
+                push(@out, "</para>");
+            }
+            $inpara = 1;
+            push(@out, $_);
+        }
+        elsif (m:</para>:) {
+            if (! $inpara) {
+                #
+                # Uh, what to do?
+                #
+                push(@out, "<para>");
+            }
+            $inpara = 0;
+            push(@out, $_);
+        }
+        else {
+            if (! $inpara) {
+                push(@out, "<para>");
+                $inpara = 1;
+            }
+            push(@out, $_);
+        }
+    }
+    $desc = join("\001", @out);
+
+    #
+    # Get rid of blanks..
+    #
+    $desc =~ s:<para>\001</para>::gsi;
+
+    $desc =~ s:^[\001\s]*::gs;
+    $desc =~ s:[\001\s]*$::gs;
+    while ($desc =~ m:\001\s*\001:) {
+        $desc =~ s:\001\s*\001:\001:gsi;
+    }
+
+    #
+    # Indent the tags.
+    #
+    $desc =~ s:<para>:    <para>:gs;
+    $desc =~ s:</para>:    </para>:gs;
+
+    #
+    # Restore the newlines.
+    #
+    $desc =~ s:\001:\n:gs;
+
+    return $desc;
+}
+
+#
+# Format an entry for output, in either our custom format or XML.
+#
+sub format_entry {
+    my($self, $item, $format) = @_;
+    my($record);
+
+    if ($format !~ /xml/i) {
+        $record = "$rtype|$item\\\n";
+        $record .= "    |" . $Definition{$item} . "\\\n";
+        $record .= "    |" . $Example{$item} . "\\\n";
+        $record .= "    |" . $SeeAlso{$item} . "\\\n";
+        $record .= "    |"
+            . ($Description_file{$item} || $Description{$item})
+            . "\n";
+    }
+    else {
+        my($sealso, $decl, $desc, $example, $id);
+        my(@list);
+
+        $id = ($item =~ m:^\w+$:)
+            ? $item
+            : &make_item($self, substr($item, 0, 8), "ITM");
+        if ($Definition{$item}) {
+            my($val) = encode_entities(decode_entities($Definition{$item}));
+            if ($Rtype{$item} =~ m:X:i) {
+                @list = split(m:,\s*:, $val);
+                $val = join("</ref>\n    <ref>", @list);
+                $val = "\n    <ref>$val</ref>\n   ";
+            }
+            else {
+                $val = &add_links($self, $val, $item, "", "", "xml", %Name);
+            }
+            $decl = "   <declaration>"
+                . $val
+                . "</declaration>\n";
+        }
+        else {
+            $decl = "   <declaration />\n";
+        }
+        $desc_pre = "   <description";
+        $desc_post = "";
+        $desc = "";
+        if (! ($Description{$item} || $Description_file{$item})) {
+            $desc_pre .= " />\n";
+        }
+        else {
+            if ((! $embed) && $Description_file{$item}) {
+                $desc_pre .= " href=\""
+                    . encode_entities(decode_entities($Description_file{$item}))
+                    . "\" />\n";
+            }
+            elsif ($Description{$item}) {
+                $desc_pre .= ">\n    ";
+                $desc_post = "\n   </description>\n";
+                #
+                # Enclose the description in <para>
+                #
+                $desc = $Description{$item};
+                #
+                # Now start repairs..
+                #
+                $desc = repair_desc($self, $desc);
+                $desc = &add_links($self, $desc, "\001", "", "", "xml", %Name);
+            }
+            else {
+                $desc_pre .= " />\n";
+            }
+        }
+        $example = "";
+        if ($Example{$item}) {
+            $example = "   <example>\n    <text>"
+                . encode_entities(decode_entities($Example{$item}))
+                . "</text>\n   </example>\n";
+        }
+        $seealso = "";
+        if ($SeeAlso{$item}) {
+            @list = split(/,\s*/, $SeeAlso{$item});
+            $seealso = join("</ref>\n    <ref>", @list);
+            $seealso = "   <seealso>\n"
+                . "    <ref>$seealso</ref>\n"
+                . "   </seealso>\n";
+        }
+        $record = " <item type=\""
+            . $Prefix{$Rtype{$item}}
+            . "\" id=\"$id\">\n"
+            . "  <name>$item</name>\n"
+            . "  <definition>\n"
+            . $decl
+            . $desc_pre . $desc . $desc_post
+            . $example
+            . $seealso;
+        $record .= "  </definition>\n"
+            . " </item>\n";
+    }
+    return $record;
+}
+#
+# Make a backup of the specified output file (if it exists), and
+# write our current dictionary into the original file.
+#
+sub writefile {
+    my($self, $outfile) = @_;
+    my($xml);
+
+    $outfile = $DictFile if (! $outfile);
+    $xml = ($outfile =~ m:\.xml$:i);
+    &backup($outfile);
+    open *NEWDICT, ">${outfile}"
+        || die("Can't open new dictionary file");
+    if ($xml) {
+        print NEWDICT "<?xml version=\"1.0\" "
+            . "encoding=\"UTF-8\" "
+            . "standalone=\"no\" ?>\n"
+            . "<?xml-stylesheet href=\"ap-dict.css\" type=\"text/css\" ?>\n"
+            . "<!DOCTYPE lexicon SYSTEM\n"
+            . " \"./ap-dict.dtd\">\n"
+            . "<lexicon name=\"Apache 1.3 API dictionary\">\n";
+        foreach (sort(keys(%Entity))) {
+            print NEWDICT &format_entry($self, $_, "xml");
+        }
+    }
+    else {
+        foreach (@Dictionary) {
+            print NEWDICT $_;
+        }
+    }
+    if ($dirty) {
+        $msg = "Definitions added by APIdict at "
+            . strftime("%Y-%m-%d %H:%M", localtime());
+        if ($xml) {
+            $msg = "<comment>\n $msg\n</comment>\n";
+        }
+        else {
+            $msg = "#;\n#; $msg\n#;\n";
+        }
+        print NEWDICT $msg;
+        foreach $entry (sort(@uncommitted)) {
+            my($rtype, $item) = split(m:=:, $entry);
+            my($record);
+
+            $record = &format_entry($self, $item, ($xml ? "xml" : "custom"));
+            print NEWDICT $record;
+            if ($xml) {
+                $record = &format_entry($self, $item, "custom");
+            }
+            push(@Dictionary, $record);
+        }
+        $dirty = 0;
+        @uncommitted = ();
+    }
+    if ($xml) {
+        print NEWDICT "</lexicon>\n";
+    }
+    close *NEWDICT;
+    return 0;
+}
+
+#
+# Private methods
+#
+
+#
+# Make a backup of the specified file by renaming it to *.1.  If
+# a *.1 file exists, rename *that* to *.2 and so on, until we can
+# move the original one to *.1.
+#
+sub backup {
+    my($filename) = @_;
+    my($index, $newindex, $basename) = ("", 1, $filename);
+
+    $filename =~ /(.*)\.([0-9]+$)/;
+    ($basename, $index) = ($1, $2);
+    if ($index) {
+        $newindex = $index + 1;
+    }
+    else {
+        $basename = $filename;
+    }
+    if (-e "$basename.$newindex") {
+        &backup("$basename.$newindex");
+    }
+    rename($filename, "$basename.$newindex");
+}
+
+sub err_is_defined {
+    my($item) = @_;
+
+    print STDERR "Item $item is already defined!\n";
+    return 0;
+}
+
+#
+# Initialiser method.  Read in the specified file (if one
+# was mentioned) and create the associative arrays and package-private
+# data cells.
+#
+sub init {
+    my($self, @args) = @_;
+
+    $dirty = 0;                 # Whether the dict has changed since read
+    @uncommitted = ();          # List of items added
+    @Dictionary = ();           # Raw text read from the dictionary file
+    $DictFile = "";             # Name of dictionary file (for checkpoints)
+
+    %Prefix = ('R' => 'Routine',
+	       'M' => 'Macro',
+	       'C' => 'Constant',
+	       'S' => 'Structure',
+	       'X' => 'Cross-reference',
+	       'D' => 'Global Data Cell');
+    $prefix_chars = join("", keys(%Prefix));
+
+    %Rtype = ();
+    %Entity = ();               # Array of Booleans for name-is-defined tests
+    %Name = ();
+    %Routine = ();              # Array of routine names
+    %Macro = ();                # Array of macro names
+    %Callable = ();             # Array of active items (routines + macros)
+    %Constant = ();             # Array of constant names
+    %Structure = ();            # Array of structure names
+    %Cell = ();                 # Array of names of global data cells
+    %Xref = ();                 # Array of related-names lists
+
+    %Example = ();              # Array of examples for entities
+    %Definition = ();           # Array of item definitions
+    %rDefinition = ();          # Reverse-map definition to item name
+    %Description = ();          # Item descriptions
+    %Description_file = ();     # Names of description files
+    %SeeAlso = ();              # Array of references for items
+
+    if (@args) {
+	return &readfile(@_);
+    }
+    return 1;
+}
+
+#
+# Private method to add an entry to the dictionary.
+#
+sub make_entry {
+    my($rtype, $item, $def, $example, $xref, $desc) = @_;
+
+    if ($Entity{$item}) {
+        return &err_is_defined($item);
+    }
+    $item = &sanitise($item);
+    $def = &sanitise($item, $def);
+    $example = &sanitise($item, $example);
+    $xref = &sanitise($item, $xref);
+    $desc = &sanitise($item, $desc);
+    $Definition{$item} = $def;
+    $rDefinition{$def} = $item;
+    $Example{$item} = $example;
+    $SeeAlso{$item} = $xref;
+    $Description{$item} = "";
+    if ($desc =~ /^<(.*)/) {
+        $Description_file{$item} = $desc;
+        $dfile = $1;
+        if (-r $dfile) {
+            if (open *DFILE, $desc) {
+                my(@lines) = <DFILE>;
+                close DFILE;
+                $Description{$item} = join("", @lines);
+            }
+        }
+    }
+    else {
+        $Description{$item} = $desc;
+        $Description_file{$item} = "";
+    }
+    $desc = ($Description_file{$item}
+             ? $Description_file{$item} : $Description{$item});
+    $rec = "$rtype|$item|$def|$example|$xref|desc";
+    $Rtype{$item} = $rtype;
+    if ($rtype eq 'R') {
+        $Routine{$item} = $rec;
+    }
+    elsif ($rtype eq 'M') {
+        $Macro{$item} = $rec;
+    }
+    elsif ($rtype eq 'C') {
+        $Constant{$item} = $rec;
+    }
+    elsif ($rtype eq 'S') {
+        $Structure{$item} = $rec;
+    }
+    elsif ($rtype eq 'X') {
+        $Xref{$item} = $rec;
+    }
+    elsif ($rtype eq 'D') {
+        $Cell{$item} = $rec;
+    }
+    $Entity{$item} = 1;
+    push(@uncommitted, "$rtype=$item");
+    $dirty++;
+}
+
+#
+# Check the argument to see if it can be expanded to any additional
+# cross-references.
+#
+sub references {
+    my($ref) = @_;
+    my($key, @list, @result) = ();
+
+    $key = $Xref{$ref};
+    if (! $key) {
+        return $ref;
+    }
+    @list = split(m:,:, $key);
+    foreach (@list) {
+        push(@result, &references($_));
+    }
+    return @result;
+}
+
+#
+# Do any necessary substitutions, such as replacing '$*' with the item name
+# and '|' with '&#124;'.
+#
+sub sanitise {
+    local($item, $_) = @_;
+
+    if (! &defined(0, $_)) {
+        $_ = $item;
+    }
+    else {
+        s:\$\*:$item:g;
+    }
+    s:\|:\&#124;:g;
+    return $_;
+}
+
+#
+# Read a record from the input stream.  Comments are trimmed, as is
+# trailing whitespace.  Leading whitespace is trimmed IFF the argument to the
+# functional evaluates as true.  A terminal slosh indicates that the next
+# line should be read and the record re-processed.  All '\n' occurrences
+# in the input are converted to newlines before being returned.
+#
+sub get_record {
+    local ($trim_leading_ws, $continued) = (@_, 0);
+    local ($trim_next) = 1;
+    my ($line);
+
+    $line = <DICTFILE> || return "";
+    push(@Dictionary, $line);
+    $DataLine++;
+    chomp ($line);
+    $line =~ s/#;.*//;
+    $line =~ s/\s+$//;
+    if ($trim_leading_ws) {
+	$line =~ s/^\s+//;
+    }
+    if ($line =~ m:\\$:) {
+	$line =~ s:\\n\s+\\$:\\n\\:;
+	$line =~ s:\\$::;
+	$trim_next = 0 if ($line =~ m:\\n$:);
+	$line .= &get_record($trim_next, 1);
+    }
+    if ($line && (! $continued)) {
+	$RecordNum++;
+	$line =~ s:([^\\])\\n:$1\n:g;
+	$line =~ s:\\\\:\\:g;
+    }
+    return ($line);
+}
+
+sub verbose {
+    my(@lines) = @_;
+    my($suffix);
+
+    if ($Verbose) {
+	foreach (@lines) {
+	    if (m:\\c$:) {
+		$suffix = "";
+	      s:\\c$::;
+	    }
+	    else {
+		$suffix = "\n";
+	    }
+	    print STDERR $_, $suffix;
+	}
+    }
+    return 1;
+}
+
+sub debug {
+    my(@lines) = @_;
+    my($suffix);
+
+    if ($Debug) {
+	foreach (@lines) {
+	    if (m:\\c$:) {
+		$suffix = "";
+	      s:\\c$::;
+	    }
+	    else {
+		$suffix = "\n";
+	    }
+	    print STDERR $_, $suffix;
+	}
+    }
+    return 1;
+}
+
+#
+# {Sigh}  Modules must have values, and this is ours.
+#
+1;

Added: httpd/site/trunk/docs/dev/apidoc/README
URL: http://svn.apache.org/viewvc/httpd/site/trunk/docs/dev/apidoc/README?rev=821352&view=auto
==============================================================================
--- httpd/site/trunk/docs/dev/apidoc/README (added)
+++ httpd/site/trunk/docs/dev/apidoc/README Sat Oct  3 16:20:11 2009
@@ -0,0 +1,60 @@
+This directory (apidoc) is the development area for an effort to document
+the Apache Web server API (Application Programing Interface).  In its
+current incarnation, there are five types of files here:
+
+  . a data file (api.list) that contains a record for each API entity; this
+    file is internally documented as to format
+  . a template file (api-dict.html) which is used as the basis for the
+    assembled documentation
+  . HTML fragment files (e.g., dict-ap_destroy_pool.html), one per API
+    entity, that contain the actual documentation for the entities
+  . a set of assembled documentation HTML files, output from mkapidict
+  . the APIdict.pm Perl module used by the scripts in the ./tools/ directory
+
+There is also a ./tools/ subdirectory which contains the scripts used
+to assemble and deal with the HTML files.  It includes
+
+  . mkapidict, a Perl script which puts all of these together to generate
+    the actual HTML documentation
+  . todo.pl, which examines the API dictionary and reports on the
+    items which are incomplete (use the output to manually update TODO)
+
+There are currently four types of API entities defined: routines,
+constants, structures, and global data cells.
+
+The mkapidict script can currently produce three different styles of
+documentation; the style is controlled by the '-l' (layout) switch:
+
+ -l0  Put each entity into its own HTML file
+ -l1  Build a single complete monolithic file
+ -l2  Same as layout 1, only streamlined (but still huge)
+ -l3  Same as layout 2, but with no links
+
+Layout 0 should be used for generating the online Web-accessed
+documentation; layouts 1 and 2 are good for producing something
+suitable for printing.  Layout 3 is good for making something
+that can be included in an offline document.
+
+Entity references in specifications and examples (but not descriptions)
+are automatically linked to the appropriate definitions (e.g., the
+'request_rec' text in the example "ap_child_terminate(request_rec *r)"
+is automatically a link to the definition of the request_rec structure).
+Since the HTML fragments can't tell which layout is in use, they
+MUST NOT link to other API entities.  It is safe for them to link
+to items outside the API documentation, however, such as the documentation
+page for an Apache module or directive.
+
+Documentation fragment files should look like this (leading whitespace
+included):
+
+  <p>
+  ..entity documentation..
+  </p>
+  <p>
+  ..more docco..
+  </p>
+
+To build the documentation for the online Web site, use the following
+command:
+
+    ./mkapidict -l0 -d api.list -o index.html -t api-dict.html -v

Propchange: httpd/site/trunk/docs/dev/apidoc/README
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpd/site/trunk/docs/dev/apidoc/README
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: httpd/site/trunk/docs/dev/apidoc/README
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: httpd/site/trunk/docs/dev/apidoc/TODO
URL: http://svn.apache.org/viewvc/httpd/site/trunk/docs/dev/apidoc/TODO?rev=821352&view=auto
==============================================================================
--- httpd/site/trunk/docs/dev/apidoc/TODO (added)
+++ httpd/site/trunk/docs/dev/apidoc/TODO Sat Oct  3 16:20:11 2009
@@ -0,0 +1,745 @@
+The following need to be added to api.list:
+
+The following have description files that need to be enhanced or re-written:
+HTTPD_ROOT (refer to ap_server_root())
+HTTP_ACCEPTED
+HTTP_BAD_GATEWAY
+HTTP_BAD_REQUEST
+HTTP_CONFLICT
+HTTP_CONTINUE
+HTTP_CREATED
+HTTP_FORBIDDEN
+HTTP_GATEWAY_TIME_OUT
+HTTP_GONE
+HTTP_INTERNAL_SERVER_ERROR
+HTTP_LENGTH_REQUIRED
+HTTP_METHOD_NOT_ALLOWED
+HTTP_MOVED_PERMANENTLY
+HTTP_MOVED_TEMPORARILY
+HTTP_MULTIPLE_CHOICES
+HTTP_NON_AUTHORITATIVE
+HTTP_NOT_ACCEPTABLE
+HTTP_NOT_FOUND
+HTTP_NOT_IMPLEMENTED
+HTTP_NOT_MODIFIED
+HTTP_NO_CONTENT
+HTTP_OK
+HTTP_PARTIAL_CONTENT
+HTTP_PAYMENT_REQUIRED
+HTTP_PRECONDITION_FAILED
+HTTP_PROXY_AUTHENTICATION_REQUIRED
+HTTP_REQUEST_ENTITY_TOO_LARGE
+HTTP_REQUEST_TIME_OUT
+HTTP_REQUEST_URI_TOO_LARGE
+HTTP_RESET_CONTENT
+HTTP_SEE_OTHER
+HTTP_SERVICE_UNAVAILABLE
+HTTP_SWITCHING_PROTOCOLS
+HTTP_UNAUTHORIZED
+HTTP_UNSUPPORTED_MEDIA_TYPE
+HTTP_USE_PROXY
+HTTP_VARIANT_ALSO_VARIES
+HTTP_VERSION_NOT_SUPPORTED
+ITERATE
+ITERATE2
+MODULE_MAGIC_NUMBER
+MULTI_ERR
+MULTI_OK
+MULTI_TIMEOUT
+M_CONNECT
+M_DELETE
+M_GET
+M_INVALID
+M_OPTIONS
+M_POST
+M_PUT
+M_TRACE
+NO_ARGS
+OK
+RAW_ARGS
+SERVER_BUSY_DNS
+SERVER_BUSY_KEEPALIVE
+SERVER_BUSY_LOG
+SERVER_BUSY_READ
+SERVER_BUSY_WRITE
+SERVER_DEAD
+SERVER_GRACEFUL
+SERVER_NUM_STATUS
+SERVER_READY
+SERVER_STARTING
+SERVER_SUPPORT
+SERVER_VERSION
+START_REQUEST
+STOP_REQUEST
+TAKE1
+TAKE12
+TAKE123
+TAKE13
+TAKE2
+TAKE23
+TAKE3
+ap_acquire_mutex
+
+conn_rec
+server_rec
+BUFF
+
+The following items need examples:
+ ap_find_linked_module
+ ap_find_list_item
+ ap_find_module_name
+ ap_find_path_info
+ ap_find_token
+ ap_fini_vhost_config
+ ap_force_library_loading
+ ap_getparents
+ ap_getpass
+ ap_getword
+ ap_getword_conf
+ ap_getword_conf_nc
+ ap_getword_nc
+ ap_getword_nulls
+ ap_getword_nulls_nc
+ ap_getword_white
+ ap_getword_white_nc
+ ap_get_basic_auth_pw
+ ap_get_client_block
+ ap_get_gmtoff
+ ap_get_limit_req_body
+ ap_get_list_item
+ ap_get_local_host
+ ap_get_module_config
+ ap_get_remote_host
+ ap_get_remote_logname
+ ap_get_time
+ ap_get_token
+ ap_get_virthost_addr
+ ap_get_win32_interpreter
+ ap_gm_timestr_822
+ ap_gname2id
+ ap_group_id
+ ap_handle_command
+ ap_hard_timeout
+ ap_ht_time
+ ap_ind
+ ap_index_of_response
+ ap_init_alloc
+ ap_init_modules
+ ap_init_vhost_config
+ ap_init_virtual_host
+ ap_internal_redirect
+ ap_internal_redirect_handler
+ ap_is_default_port
+ ap_is_directory
+ ap_is_fnmatch
+ ap_is_matchexp
+ ap_is_url
+ ap_keepalive_timeout
+ ap_kill_cleanup
+ ap_kill_cleanups_for_fd
+ ap_kill_cleanups_for_socket
+ ap_limit_section
+ ap_loaded_modules
+ ap_log_assert
+ ap_log_error
+ ap_log_pid
+ ap_log_printf
+ ap_log_reason
+ ap_log_rerror
+ ap_log_unixerr
+ ap_make_array
+ ap_make_dirstr
+ ap_make_dirstr_parent
+ ap_make_dirstr_prefix
+ ap_make_etag
+ ap_make_full_path
+ ap_make_sub_pool
+ ap_make_table
+ ap_matches_request_vhost
+ ap_max_requests_per_child
+ ap_md5
+ ap_md5context
+ ap_md5contextTo64
+ ap_md5digest
+ ap_MD5Encode
+ ap_MD5Final
+ ap_MD5Init
+ ap_MD5Update
+ ap_md5_binary
+ ap_merge_per_dir_configs
+ ap_method_number_of
+ ap_my_generation
+ ap_no2slash
+ ap_note_cleanups_for_fd
+ ap_note_cleanups_for_file
+ ap_note_cleanups_for_h
+ ap_note_cleanups_for_socket
+ ap_note_subprocess
+ ap_null_cleanup
+ ap_open_logs
+ ap_open_piped_log
+ ap_os_case_canonical_filename
+ ap_os_escape_path
+ ap_os_is_filename_valid
+ ap_os_is_path_absolute
+ ap_os_systemcase_filename
+ ap_overlap_tables
+ ap_overlay_tables
+ ap_palloc
+ ap_parseHTTPdate
+ ap_parse_htaccess
+ ap_parse_uri
+ ap_parse_uri_components
+ ap_parse_vhost_addrs
+ ap_pbase64decode
+ ap_pbase64encode
+ ap_pcalloc
+ ap_pcfg_openfile
+ ap_pcfg_open_custom
+ ap_pclosedir
+ ap_pclosef
+ ap_pcloseh
+ ap_pclosesocket
+ ap_pduphostent
+ ap_pfclose
+ ap_pfdopen
+ ap_pfopen
+ ap_pgethostbyname
+ ap_pid_fname
+ ap_pool
+ ap_pool_is_ancestor
+ ap_pool_join
+ ap_popendir
+ ap_popenf
+ ap_pregcomp
+ ap_pregfree
+ ap_pregsub
+ ap_psignature
+ ap_psocket
+ ap_pstrcat
+ ap_pstrdup
+ ap_pstrndup
+ ap_read_config
+ ap_read_request
+ ap_regerror
+ ap_regexec
+ ap_register_cleanup
+ ap_register_other_child
+ ap_registry_get_server_root
+ ap_registry_get_service_conf
+ ap_registry_set_service_conf
+ ap_release_mutex
+ ap_remove_module
+ ap_remove_spaces
+ ap_requires
+ ap_response_code_string
+ ap_rfc1413
+ ap_rind
+ ap_rprintf
+ ap_rputc
+ ap_rputs
+ ap_run_cleanup
+ ap_rvputs
+ ap_rwrite
+ ap_scan_script_header_err
+ ap_scan_script_header_err_buff
+ ap_scan_script_header_err_core
+ ap_scoreboard_fname
+ ap_send_error_response
+ ap_send_fb
+ ap_send_fb_length
+ ap_send_fd
+ ap_send_fd_length
+ ap_send_header_field
+ ap_send_mmap
+ ap_send_size
+ ap_server_confname
+ ap_server_root_relative
+ ap_setup_client_block
+ ap_set_callback_and_alarm
+ ap_set_content_length
+ ap_set_file_slot
+ ap_set_flag_slot
+ ap_set_module_config
+ ap_set_name_virtual_host
+ ap_set_string_slot
+ ap_set_string_slot_lower
+ ap_set_sub_req_protocol
+ ap_SHA1Final
+ ap_SHA1Init
+ ap_SHA1Update
+ ap_SHA1Update_binary
+ ap_sha1_base64
+ ap_size_list_item
+ ap_soft_timeout
+ ap_spawn_child
+ ap_spawn_child_err
+ ap_spawn_child_err_buff
+ ap_srm_command_loop
+ ap_standalone
+ ap_start_restart
+ ap_strcasecmp_match
+ ap_strcasestr
+ ap_strcmp_match
+ ap_str_tolower
+ ap_sub_req_lookup_file
+ ap_sub_req_lookup_uri
+ ap_sub_req_method_uri
+ ap_table_add
+ ap_table_addn
+ ap_table_do
+ ap_table_get
+ ap_table_merge
+ ap_table_mergen
+ ap_table_set
+ ap_table_setn
+ ap_table_unset
+ ap_threads_per_child
+ ap_time_process_request
+ ap_tm2sec
+ ap_to64
+ ap_uname2id
+ ap_unblock_alarms
+ ap_unescape_url
+ ap_unparse_uri_components
+ ap_unregister_other_child
+ ap_update_child_status
+ ap_update_mtime
+ ap_update_vhost_given_ip
+ ap_user_id
+ ap_user_name
+ ap_uudecode
+ ap_uuencode
+ ap_vbprintf
+ ap_vformatter
+ ap_vformatter_buff
+ ap_vrprintf
+ ascii2ebcdic
+ BO_BYTECT
+ BUFF
+ B_ASCII2EBCDIC
+ B_CHUNK
+ B_EBCDIC2ASCII
+ B_EOF
+ B_EOUT
+ B_ERROR
+ B_RD
+ B_RDERR
+ B_RDWR
+ B_SAFEREAD
+ B_SFIO
+ B_SOCKET
+ B_WR
+ B_WRERR
+ child_info
+ closedir
+ cmd_parms
+ command_rec
+ configfile_t
+ conn_rec
+ DEFAULT_HTTPS_PORT
+ DEFAULT_HTTP_PORT
+ ebcdic2ascii
+ FNM_CASE_BLIND
+ FNM_NOESCAPE
+ FNM_NOMATCH
+ FNM_PATHNAME
+ FNM_PERIOD
+ GLOBAL_ONLY
+ HANDLE
+ HTTP_VERSION
+ MODULE_MAGIC_AT_LEAST
+ NOT_IN_DIRECTORY
+ NOT_IN_DIR_LOC_FILE
+ NOT_IN_FILES
+ NOT_IN_LIMIT
+ NOT_IN_LOCATION
+ NOT_IN_VIRTUALHOST
+ opendir
+ os_spawnle
+ os_spawnv
+ os_spawnve
+ os_stat
+ piped_log
+ proxyreqtype
+ readdir
+ regcomp
+ regerror
+ regexec
+ regex_t
+ regfree
+ regmatch_t
+ REQUEST_CHUNKED_DECHUNK
+ REQUEST_CHUNKED_ERROR
+ REQUEST_CHUNKED_PASS
+ REQUEST_NO_BODY
+ request_rec
+ scoreboard
+ server_addr_rec
+ server_rec
+ short_score
+ STANDARD_MODULE_STUFF
+ uri_components
+The following items have no descriptions nor detail files:
+ apache_sfio
+ APLOG_ALERT
+ APLOG_CRIT
+ APLOG_DEBUG
+ APLOG_EMERG
+ APLOG_ERR
+ APLOG_INFO
+ APLOG_LEVELMASK
+ APLOG_MARK
+ APLOG_NOERRNO
+ APLOG_NOTICE
+ APLOG_WARNING
+ APLOG_WIN32ERROR
+ ap_add_module
+ ap_add_named_module
+ ap_add_per_url_conf
+ ap_allow_overrides
+ ap_base64decode
+ ap_base64decode_binary
+ ap_base64decode_len
+ ap_base64encode
+ ap_base64encode_binary
+ ap_base64encode_len
+ ap_basic_http_header
+ ap_bclose
+ ap_bcreate
+ ap_bfileno
+ ap_bflsbuf
+ ap_bflush
+ ap_bgetc
+ ap_bgetflag
+ ap_bgetopt
+ ap_bgets
+ ap_bhalfduplex
+ ap_blookc
+ ap_bnonblock
+ ap_bonerror
+ ap_bpushfd
+ ap_bpushh
+ ap_bputc
+ ap_bputs
+ ap_bread
+ ap_bsetflag
+ ap_bsetopt
+ ap_bskiplf
+ ap_bspawn_child
+ ap_bvputs
+ ap_bwrite
+ ap_checkmask
+ ap_check_access
+ ap_check_alarm
+ ap_check_auth
+ ap_check_cmd_context
+ ap_check_user_id
+ ap_child_exit_modules
+ ap_child_init_modules
+ ap_child_terminate
+ ap_clear_module_list
+ ap_close_piped_log
+ ap_content_type_tolower
+ ap_core_reorder_directories
+ ap_create_environment
+ ap_create_per_dir_config
+ ap_create_request_config
+ ap_daemons_limit
+ ap_daemons_max_free
+ ap_daemons_min_free
+ ap_daemons_to_start
+ ap_default_port_for_request
+ ap_default_port_for_scheme
+ ap_default_type
+ ap_die
+ ap_discard_request_body
+ ap_each_byterange
+ ap_error_log2stderr
+ ap_excess_requests_per_child
+ ap_exists_config_define
+ ap_exists_scoreboard_image
+ ap_extended_status
+ ap_finalize_request_protocol
+ ap_finalize_sub_req_protocol
+ ap_find_command
+ ap_find_command_in_modules
+ ap_find_last_token
+ ap_find_linked_module
+ ap_find_list_item
+ ap_find_module_name
+ ap_find_path_info
+ ap_find_pool
+ ap_find_types
+ ap_fini_vhost_config
+ ap_force_library_loading
+ ap_getpass
+ ap_get_basic_auth_pw
+ ap_get_limit_req_body
+ ap_get_list_item
+ ap_get_module_config
+ ap_get_remote_host
+ ap_get_remote_logname
+ ap_get_win32_interpreter
+ ap_group_id
+ ap_handle_command
+ ap_header_parse
+ ap_ind
+ ap_index_of_response
+ ap_init_alloc
+ ap_init_modules
+ ap_init_vhost_config
+ ap_init_virtual_host
+ ap_invoke_handler
+ ap_is_default_port
+ ap_is_fnmatch
+ ap_is_initial_req
+ ap_limit_section
+ ap_loaded_modules
+ ap_log_assert
+ ap_log_error
+ ap_log_pid
+ ap_log_printf
+ ap_log_reason
+ ap_log_rerror
+ ap_log_transaction
+ ap_log_unixerr
+ ap_make_dirstr_parent
+ ap_make_dirstr_prefix
+ ap_make_etag
+ ap_matches_request_vhost
+ ap_max_requests_per_child
+ ap_md5
+ ap_md5context
+ ap_md5contextTo64
+ ap_md5digest
+ ap_MD5Encode
+ ap_MD5Final
+ ap_MD5Init
+ ap_MD5Update
+ ap_md5_binary
+ AP_MD5_CTX
+ ap_meets_conditions
+ ap_merge_per_dir_configs
+ ap_method_number_of
+ ap_my_generation
+ ap_note_auth_failure
+ ap_note_basic_auth_failure
+ ap_note_cleanups_for_h
+ ap_note_digest_auth_failure
+ ap_null_cleanup
+ ap_open_logs
+ ap_open_piped_log
+ ap_os_case_canonical_filename
+ ap_os_escape_path
+ ap_os_is_filename_valid
+ ap_os_is_path_absolute
+ ap_os_systemcase_filename
+ ap_overlap_tables
+ ap_parse_htaccess
+ ap_parse_uri
+ ap_parse_uri_components
+ ap_parse_vhost_addrs
+ ap_pbase64decode
+ ap_pbase64encode
+ ap_pcfg_openfile
+ ap_pcfg_open_custom
+ ap_pclosedir
+ ap_pcloseh
+ ap_pclosesocket
+ ap_pduphostent
+ ap_pgethostbyname
+ ap_pid_fname
+ ap_pool_is_ancestor
+ ap_pool_join
+ ap_popendir
+ ap_pregfree
+ ap_process_request
+ ap_process_resource_config
+ ap_psignature
+ ap_psocket
+ ap_read_config
+ ap_read_request
+ ap_regerror
+ ap_regexec
+ ap_register_other_child
+ ap_registry_get_server_root
+ ap_registry_get_service_conf
+ ap_registry_set_service_conf
+ ap_release_mutex
+ ap_remove_loaded_module
+ ap_remove_module
+ ap_remove_spaces
+ ap_requires
+ ap_response_code_string
+ ap_rfc1413
+ ap_rflush
+ ap_rind
+ ap_run_fixups
+ ap_run_post_read_request
+ ap_rwrite
+ ap_satisfies
+ ap_scan_script_header_err
+ ap_scan_script_header_err_buff
+ ap_scan_script_header_err_core
+ ap_scoreboard_fname
+ ap_send_error_response
+ ap_send_header_field
+ ap_send_http_options
+ ap_send_http_trace
+ ap_send_mmap
+ ap_send_size
+ ap_server_confname
+ ap_server_root_relative
+ ap_setup_prelinked_modules
+ ap_set_byterange
+ ap_set_callback_and_alarm
+ ap_set_content_length
+ ap_set_etag
+ ap_set_file_slot
+ ap_set_flag_slot
+ ap_set_keepalive
+ ap_set_last_modified
+ ap_set_module_config
+ ap_set_name_virtual_host
+ ap_set_string_slot
+ ap_set_string_slot_lower
+ ap_set_sub_req_protocol
+ ap_SHA1Final
+ ap_SHA1Init
+ ap_SHA1Update
+ ap_SHA1Update_binary
+ ap_sha1_base64
+ ap_show_directives
+ ap_show_modules
+ ap_size_list_item
+ ap_some_auth_required
+ ap_spawn_child
+ ap_srm_command_loop
+ ap_standalone
+ ap_start_restart
+ ap_start_shutdown
+ ap_strcasestr
+ ap_str_tolower
+ ap_sub_req_method_uri
+ ap_sync_scoreboard_image
+ ap_table_do
+ ap_threads_per_child
+ ap_time_process_request
+ ap_to64
+ ap_translate_name
+ ap_unparse_uri_components
+ ap_unregister_other_child
+ ap_update_child_status
+ ap_update_mtime
+ ap_update_vhost_from_headers
+ ap_update_vhost_given_ip
+ ap_user_id
+ ap_user_name
+ ap_util_init
+ ap_util_uri_init
+ ap_uuencode
+ ap_validate_password
+ ap_vformatter
+ ap_vformatter_buff
+ ap_vrprintf
+ ap_wait_t
+ array_header
+ ascii2ebcdic
+ BO_BYTECT
+ BUFF
+ B_ASCII2EBCDIC
+ B_CHUNK
+ B_EBCDIC2ASCII
+ B_EOF
+ B_EOUT
+ B_ERROR
+ B_RD
+ B_RDERR
+ B_RDWR
+ B_SAFEREAD
+ B_SOCKET
+ B_WR
+ B_WRERR
+ child_info
+ closedir
+ command_rec
+ configfile_t
+ DECLINE_CMD
+ DEFAULT_ADMIN
+ DEFAULT_CONTENT_TYPE
+ DEFAULT_HTTPS_PORT
+ DEFAULT_HTTP_PORT
+ DEFAULT_KEEPALIVE
+ DEFAULT_KEEPALIVE_TIMEOUT
+ DEFAULT_PATH
+ DEFAULT_TIMEOUT
+ ebcdic2ascii
+ FNM_CASE_BLIND
+ FNM_NOESCAPE
+ FNM_NOMATCH
+ FNM_PATHNAME
+ FNM_PERIOD
+ GLOBAL_ONLY
+ HTTP_EXPECTATION_FAILED
+ HTTP_FAILED_DEPENDENCY
+ HTTP_INSUFFICIENT_STORAGE
+ HTTP_LOCKED
+ HTTP_NOT_EXTENDED
+ HTTP_PROCESSING
+ HTTP_RANGE_NOT_SATISFIABLE
+ HTTP_UNPROCESSABLE_ENTITY
+ HTTP_VERSION
+ HTTP_VERSION_MAJOR
+ HTTP_VERSION_MINOR
+ MODULE_MAGIC_COOKIE
+ MODULE_MAGIC_NUMBER_MAJOR
+ MODULE_MAGIC_NUMBER_MINOR
+ M_COPY
+ M_LOCK
+ M_MKCOL
+ M_MOVE
+ M_PATCH
+ M_PROPFIND
+ M_UNLOCK
+ NOT_IN_DIRECTORY
+ NOT_IN_DIR_LOC_FILE
+ NOT_IN_FILES
+ NOT_IN_LIMIT
+ NOT_IN_LOCATION
+ NOT_IN_VIRTUALHOST
+ opendir
+ OPT_ALL
+ OPT_EXECCGI
+ OPT_INCLUDES
+ OPT_INCNOEXEC
+ OPT_INDEXES
+ OPT_MULTI
+ OPT_NONE
+ OPT_SYM_LINKS
+ OPT_SYM_OWNER
+ OPT_UNSET
+ OS_ASC
+ os_spawnle
+ os_spawnv
+ os_spawnve
+ os_stat
+ os_strftime
+ piped_log
+ proxyreqtype
+ readdir
+ regcomp
+ regerror
+ regexec
+ regex_t
+ regfree
+ regmatch_t
+ REQUEST_CHUNKED_DECHUNK
+ REQUEST_CHUNKED_ERROR
+ REQUEST_CHUNKED_PASS
+ REQUEST_NO_BODY
+ scoreboard
+ server_addr_rec
+ short_score
+ STANDARD_MODULE_STUFF
+ uri_components

Added: httpd/site/trunk/docs/dev/apidoc/ap-dict.css
URL: http://svn.apache.org/viewvc/httpd/site/trunk/docs/dev/apidoc/ap-dict.css?rev=821352&view=auto
==============================================================================
--- httpd/site/trunk/docs/dev/apidoc/ap-dict.css (added)
+++ httpd/site/trunk/docs/dev/apidoc/ap-dict.css Sat Oct  3 16:20:11 2009
@@ -0,0 +1,718 @@
+/* This is a customized version of the DocBookX Stylesheet supplied
+   with XMetaL. Basically, the stylesheet has been laid out so that every
+   DocBook will look similarly to a Journalist's document.  This
+   stylesheet is not complete by far, many tags are missing or are
+   formatted incompletely. Please modify or add any formattings as you
+   are working with this stylesheet and mail them back to me.  Till
+   Gerken
+*/
+/****************************************************************************/
+/*                       Global Display Settings                            */
+/****************************************************************************/
+$DOCUMENT {
+  font-family: "Footlight MT Light", Garamond, Palatino, "Times New Roman", serif;
+  font-size: 10pt;
+  margin-top: 5px;
+  margin-left: 5px;
+  line-height: 18pt;
+  margin-bottom: 16pt;
+  padding-top: 8pt;
+  padding-left: 8pt;
+  text-align: left;
+}
+
+$COMMENT {
+  display: inline;
+  color: #800000;
+  white-space: pre;
+  font-family: sans-serif;
+  background-color: #E0E0E0;
+  text-align: left;
+}
+
+$PROCINS {
+  color: green;
+  text-align: left;
+}
+
+/****************************************************************************/
+/*                         Tag Display Settings                             */
+/****************************************************************************/
+lexicon :before {
+  font-size: 20pt;
+  content: attr(name);
+  text-align: center;
+  display: block;
+}
+
+item :before {
+  content: attr(type) " ";
+  font-family: "Footlight MT Light", Garamond, Palatino, "Times New Roman", serif;
+  font-size: 14pt;
+}
+
+item {
+  margin-top: 24pt;
+  display: block;
+}
+
+item [type~="Cross-reference"] {
+  display: none;
+}
+
+item name {
+  color: #00ffff;
+  font-family: monospace;
+  font-size: 14pt;
+  font-weight: bold;
+}
+
+declaration:before {
+  text-align: left;
+  text-indent: -2pc;
+  font-family: "Footlight MT Light", Garamond, Palatino, "Times New Roman", serif;
+  font-style: italic;
+  font-size: 12pt;
+  content: "Declaration:";
+  display: block;
+  margin-top: 12pt;
+}
+
+var {
+  font-style: italic;
+  display: inline;
+}
+
+severity :before {
+  content: "Severity: ";
+  font-family: "Footlight MT Light", Garamond, Palatino, "Times New Roman", serif;
+  font-size: 12pt;
+  margin-top: 12pt;
+  display: inline;
+}
+
+severity {
+  display: block;
+}
+
+version :before {
+  content: "Apache version: ";
+  font-family: "Footlight MT Light", Garamond, Palatino, "Times New Roman", serif;
+  margin-top: 12pt;
+  font-size: 12pt;
+  display: inline;
+}
+
+version {
+  display: block;
+}
+
+defined-by :before {
+  content: "Message reported by: ";
+  font-family: "Footlight MT Light", Garamond, Palatino, "Times New Roman", serif;
+  margin-top: 12pt;
+  font-size: 12pt;
+  display: inline;
+}
+
+defined-by {
+  font-family: monospace;
+  display: block;
+  font-size: 10pt;
+}
+
+flags :before {
+  content: "Message includes: ";
+  font-family: "Footlight MT Light", Garamond, Palatino, "Times New Roman", serif;
+  margin-top: 12pt;
+  font-size: 12pt;
+  display: inline;
+}
+
+flags flag :before {
+  content: ", ";
+}
+
+flags flag {
+  display: inline;
+}
+
+declaration {
+  text-align: left;
+  margin-left: 2pc;
+  font-size: 8pt;
+  display: block;
+  font-family: monospace;
+}
+
+description para {
+  display: block;
+  text-align: left;
+  margin-top: 12pt;
+}
+
+action para {
+  display: block;
+  text-align: left;
+  margin-top: 12pt;
+  margin-left: 2em;
+}
+
+response :before {
+  content: "Corrective action(s):";
+  font-weight: bold;
+  display: block;
+}
+
+seealso :before {
+  content: "See also: ";
+  font-style: italic;
+  font-weight: bold;
+}
+
+ref {
+  color: #ff00ff;
+}
+
+seealso ref {
+  color: #ff00ff;
+  font-family: monospace;
+}
+
+example text {
+  display: block;
+  white-space: pre;
+  font-family: monospace;
+  margin-top: 5pt;
+  margin-bottom: 5pt;
+  font-size: 80%;
+  text-align: left;
+  color: green;
+}
+
+book {
+  display: block;
+  font-family: Arial, Helvetica, sans-serif;
+  padding-left: 8pt;
+  padding-top: 8pt;
+  font-size: 10pt;
+  text-align: left;
+}
+
+book title {
+  font-weight: bold;
+  font-family: Verdana, Tahoma, sans-serif;
+  display: block;
+  font-size: 200%;
+  border-top: medium;
+  color: #000099;
+  text-align: center;
+  margin-bottom: 8pt;
+}
+
+/* NOTE: This refers to "book bibliography" NOT to "bookbiblio"! */
+appendix title, preface title, book bibliography title, chapter title, toc title {
+  align: left;
+  border-top: medium gray solid;
+  display: block;
+  font-family: Verdana, Tahoma, sans-serif;
+  font-size: 180%;
+  font-weight: bold;
+  margin-bottom: 10pt;
+  margin-top: 16pt;
+  text-align: left;
+  color: #008080;
+}
+
+appendix title :before {
+  content: "Appendix: ";
+  text-align: left;
+}
+
+sect1 title {
+  align: left;
+  border-top: thin gray solid;
+  display: block;
+  font-family: Verdana, Tahoma, sans-serif;
+  font-size: 150%;
+  font-weight: bold;
+  margin-bottom: 8pt;
+  margin-top: 12pt;
+  text-align: left;
+  color: #008080;
+}
+
+sect2 title {
+  align: left;
+  border-top: thin gray solid;
+  display: block;
+  font-family: Verdana, Tahoma, sans-serif;
+  font-size: 130%;
+  font-weight: bold;
+  margin-bottom: 8pt;
+  margin-top: 12pt;
+  text-align: left;
+  color: #008080;
+}
+
+sect3 {
+  margin-left: 12pt;
+}
+
+sect3 title {
+  align: left;
+  border-top: thin gray solid;
+  display: block;
+  font-family: Verdana, Tahoma, sans-serif;
+  font-size: 110%;
+  font-weight: bold;
+  margin-bottom: 8pt;
+  margin-top: 12pt;
+  text-align: left;
+  color: #008080;
+}
+
+listitem para, sect1, sect2, sect3, sect4 {
+  display: block;
+  text-align: left;
+}
+
+/* Warning, Caution and Note */
+warning:before {
+  content: "Warning: ";
+  text-align: left;
+}
+
+caution:before {
+  content: "Caution: ";
+  text-align: left;
+}
+
+caution, warning {
+  color: red;
+  text-align: left;
+}
+
+note:before {
+  content: "Note: ";
+  text-align: left;
+}
+
+note {
+  color: navy;
+  text-align: left;
+}
+
+warning, caution, note {
+  display: block;
+  font-weight: bold;
+  text-align: left;
+  background-color: #F2F2F2;
+  border: 1px black solid;
+}
+
+/* Bibliography settings */
+biblioentry {
+  margin-left: 24pt;
+  margin-top: 5pt;
+  text-align: left;
+}
+
+bibliography title {
+  font-size: 14pt;
+  font-weight: bold;
+  text-align: left;
+}
+
+literallayout {
+  display: block;
+  margin-top: 4pt;
+  margin-left: 10pt;
+  white-space: pre;
+  text-align: left;
+  font-family: "Courier New";
+  font-weight: bold;
+  font-size: 10pt;
+}
+
+programlisting {
+  display: block;
+  white-space: pre;
+  font-family: monospace;
+  margin-top: 5pt;
+  margin-bottom: 5pt;
+  font-size: 80%;
+  text-align: left;
+  color: green;
+}
+
+orderedlist {
+  display: block;
+  list-style-type: decimal;
+  margin-bottom: 10pt;
+  margin-top: 5pt;
+  text-align: left;
+}
+
+para {
+  display: block;
+  text-align: left;
+  margin-top: 4pt;
+  margin-left: 4pt;
+  margin-right: 4pt;
+  margin-bottom: 4pt;
+  font-family: Arial, Helvetica, sans-serif;
+}
+
+listitem {
+  margin-left: 25pt;
+  display: list-item;
+  text-align: left;
+}
+
+itemizedlist {
+  display: block;
+  list-style-type: disc;
+  margin-bottom: 10pt;
+  margin-top: 5pt;
+  text-align: left;
+}
+
+figure title:before {
+  content: "Figure: ";
+}
+
+figure title {
+  font-family: Arial;
+  font-style: italic;
+  font-weight: normal;
+  display: block;
+  text-align: left;
+  font-size: 10pt;
+  font-variant: normal;
+  color: black;
+  margin-bottom: 0pt;
+}
+
+/* Variable List Settings */
+variablelist title {
+  font-weight: bold;
+  display: block;
+  text-align: left;
+}
+
+variablelist {
+  margin-left: 10pt;
+  text-align: left;
+}
+
+varlistentry {
+  display: block;
+  margin-top: 10pt;
+  padding-top: 8pt;
+  padding-left: 8pt;
+  text-align: left;
+}
+
+varlistentry term {
+  display: block;
+  font-weight: bold;
+  color: 408080;
+  margin-top: 10pt;
+  padding-top: 8pt;
+  padding-left: 8pt;
+  text-align: left;
+}
+
+varlistentry>listitem {
+  margin-left: 25pt;
+  padding-top: 8pt;
+  padding-left: 8pt;
+  display: block;
+  text-align: left;
+}
+
+orgname {
+  font-style: italic;
+  display: block;
+  text-align: center;
+}
+
+table, figure, preface {
+  text-align: left;
+  display: block;
+  margin-top: 10pt;
+}
+
+author {
+  text-align: center;
+  margin-top: 15pt;
+  margin-left: 20pt;
+  display: block;
+}
+
+copyright {
+  font-size: small;
+  text-align: center;
+  display: block;
+}
+
+copyright:before {
+  content: "Copyright (c) 1999 ";
+  text-align: left;
+}
+
+caption {
+  font-weight: bold;
+  text-align: left;
+  font-size: large;
+}
+
+address {
+  text-align: center;
+  display: block;
+  margin-top: 10pt;
+  white-space: pre;
+}
+
+jobtitle {
+  display: block;
+  text-align: center;
+}
+
+pubdate {
+  text-align: center;
+  display: block;
+  font-size: 9pt;
+  font-style: italic;
+  font-family: sans-serif;
+}
+
+pubdate:before {
+  content: "Last modified: ";
+}
+
+thead th {
+  color: red;
+  background-color: yellow;
+}
+
+abstract {
+  font-style: italic;
+  margin-top: 12pt;
+}
+
+tocpart tocentry {
+  align: left;
+  font-size: 100%;
+  display: block;
+  text-align: left;
+  font-weight: bold;
+}
+
+tocchap tocentry {
+  margin-left: 10pt;
+  font-weight: normal;
+}
+
+toclevel1 tocentry {
+  margin-left: 20pt;
+  font-weight: normal;
+}
+
+important {
+  font-style: normal;
+  font-weight: bold;
+}
+
+function {
+  white-space: pre;
+  font-family: monospace;
+  color: #FF6633;
+}
+
+paramdef:before {
+  content: "(";
+display:block;
+}
+
+paramdef:after {
+  content: ")";
+}
+
+funcsynopsis {
+  display: inline;
+  white-space: normal;
+}
+
+example title {
+  font-size: 10pt;
+}
+
+action title {
+  font-weight: bold;
+  font-size: 12pt;
+  display: block;
+  margin-top: 12pt;
+  margin-left: 1em;
+}
+
+optional:before {
+  content: "[";
+}
+
+optional:after {
+  content: "]";
+}
+
+example:before {
+  content: "Example:";
+  display: block;
+  margin-top: 12pt;
+  font-weight: bold;
+  font-size: 12pt;
+}
+
+publishername {
+  text-align: center;
+}
+
+bookinfo {
+  visibility: hidden;
+  display: none;
+}
+
+envar, parameter {
+  font-family: monospace;
+  color: #0066FF;
+}
+
+structname {
+  font-family: monospace;
+}
+
+formalpara title, title {
+  font-size: 12pt;
+}
+
+tip:before {
+  content: "Tip:";
+  font-weight: bold;
+}
+
+ulink, link {
+  font-style: italic;
+  display: inline;
+}
+
+literal {
+  font-style: italic;
+  color: #009900;
+}
+
+emphasis, citation {
+  font-style: italic;
+}
+
+returnvalue:before {
+  content: "Returns: ";
+  font-weight: bold;
+}
+
+action {
+  display: block;
+  color: #000000;
+}
+
+funcdef, funcsynopsisinfo, funcsynopsisinfo, abbrev, ackno, acronym, affiliation, alt, answer, appendix, areaset, areaspec, arg, artheader, article, artpagenums, attribution, audioobject, authorblurb, authorgroup, authorinitials, bibliodiv, bibliography, bibliomisc, bibliomixed, biblioset, blockquote, bookbiblio, bookinfo, bridgehead, callout, calloutlist, chapter, citerefentry, citetitle, cmdsynopsis, collab, collabname, colophon, command, comment, confdates, confgroup, confnum, confsponsor, conftitle, contractnum, contractsponsor, contrib, corpauthor, corpname, date, dedication, docinfo, edition, editor, entry, entrytbl, epigraph, equation, example, firstname, footnote, formalpara, funcprototype, funcsynopsis, glossary, glossdef, glossdiv, glossentry, glosslist, glosssee, glossseealso, graphicco, group, guibutton, guiicon, guilabel, guimenu, guimenuitem, guisubmenu, highlights, holder, honorific, imageobject, imageobjectco, important, index, indexdiv, indexentry, indexterm
 , informalequation, informalexample, informalfigure, informaltable, inlineequation, inlinemediaobject, interface, invpartnumber, isbn, issn, issuenum, itermset, keycap, keycombo, keysym, keyword, keywordset, label, legalnotice, lineage, link, lot, lotentry, manvolnum, mediaobject, mediaobjectco, member, menuchoice, modespec, mousebutton, msg, msgaud, msgentry, msgexplan, msginfo, msglevel, msgmain, msgorig, msgrel, msgset, msgsub, msgtext, objectinfo, olink, orgdiv, othercredit, othername, pagenums, part, partintro, phrase, primary, primaryie, printhistory, procedure, productname, productnumber, programlistingco, publisher, publishername, pubsnumber, qandadiv, qandaentry, qandaset, question, refclass, refdescriptor, refentry, refentrytitle, reference, refmeta, refmiscinfo, refname, refnamediv, refpurpose{   display: block;
+}
+refsect1{   display: block;
+}
+refsect1info, refsect2, refsect2info, refsect3, refsect3info, refsynopsisdiv, refsynopsisdivinfo, releaseinfo, replaceable {
+  display: inline;
+}
+
+revhistory, revision, revnumber, revremark, row, screen, screenco, screeninfo, screenshot, secondary, secondaryie, sect1info, sect2info, sect3info, sect4info, sect5, sect5info, section, sectioninfo, see, seealso {
+  display: block;
+}
+
+seealsoie, seeie, seg, seglistitem, segmentedlist, segtitle, seriesinfo, seriesvolnums, set, setindex, setinfo, shortaffil, shortcut, sidebar, simpara, simplelist, simplesect, step, subject, subjectset, subjectterm, substeps, subtitle, surname, synopfragment, synopfragmentref, synopsis, tbody, term, tertiary, tertiaryie, textobject, tfoot, tgroup, thead, tip, title, titleabbrev, tocback, tocfront, toclevel1, toclevel2, toclevel3, toclevel4, toclevel5, tocpart, videoobject, volumenum, year {
+  display: block;
+}
+
+option {
+  font-family: monospace;
+}
+
+funcdef function:after {
+  content: " ";
+}
+
+funcsynopsis type:after {
+  content: " ";
+}
+
+paramdef parameter:after {
+  content: " ";
+}
+
+parameter + parameter {
+  font-weight: bold;
+}
+
+funcsynopsis action:after {
+  content: "";
+}
+
+term type:before {
+  content: " (";
+}
+
+term type:after {
+  content: ")";
+}
+
+thead {
+  font-weight: bold;
+}
+
+subscript {
+  font-size: 80%;
+  vertical-align: sub;
+  text-align: left;
+}
+
+command, glossterm {
+  display: inline;
+  font-family: monospace;
+  font-weight: bold;
+}
+
+comment {
+  color: red;
+  background-color: yellow;
+}
+
+seealso {
+  font-size: 9pt;
+  font-style: italic;
+  color: #009900;
+}
+
+type {
+  color: #669999;
+}
+
+replaceable {
+  color: #990099;
+}
+
+screen {
+  display: block;
+  white-space: pre;
+  font-family: monospace;
+  margin-top: 5pt;
+  margin-bottom: 5pt;
+  font-size: 80%;
+  text-align: left;
+}
\ No newline at end of file

Propchange: httpd/site/trunk/docs/dev/apidoc/ap-dict.css
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpd/site/trunk/docs/dev/apidoc/ap-dict.css
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: httpd/site/trunk/docs/dev/apidoc/ap-dict.css
------------------------------------------------------------------------------
    svn:mime-type = text/css

Added: httpd/site/trunk/docs/dev/apidoc/ap-dict.dtd
URL: http://svn.apache.org/viewvc/httpd/site/trunk/docs/dev/apidoc/ap-dict.dtd?rev=821352&view=auto
==============================================================================
--- httpd/site/trunk/docs/dev/apidoc/ap-dict.dtd (added)
+++ httpd/site/trunk/docs/dev/apidoc/ap-dict.dtd Sat Oct  3 16:20:11 2009
@@ -0,0 +1,324 @@
+<!-- DTD for the Apache dictionary structures (API, error message, ...) -->
+
+<!-- The ubiquitous invisible comment for internal documentation.
+-->
+<!ENTITY % elements.action
+	"">
+<!ENTITY % content.action
+	"(comment*,
+        title?,
+        comment*,
+        para*,
+        comment*)">
+<!ENTITY % elements.b
+	"i
+        |literal">
+<!ENTITY % content.b
+	"(#PCDATA
+        |%elements.b;)*">
+
+<!ENTITY % elements.comment
+	"">
+<!ENTITY % content.comment
+	"(#PCDATA)*">
+
+<!ENTITY % elements.dd
+	"b
+        |i
+        |literal
+        |ref">
+<!ENTITY % content.dd
+	"(#PCDATA
+        |%elements.dd;)*">
+
+<!ENTITY % elements.declaration
+	"b
+        |comment
+        |i
+        |literal
+        |ref
+        |type
+        |var">
+<!ENTITY % content.declaration
+	"(#PCDATA
+        |%elements.declaration;)*">
+
+<!ENTITY % elements.defined-by
+	"comment">
+<!ENTITY % content.defined-by
+	"(#PCDATA
+        |%elements.defined-by;)*">
+
+<!ENTITY % elements.definition
+	"comment
+        |declaration
+        |defined-by
+        |description
+        |example
+        |flags
+        |response
+        |returns
+        |seealso
+        |severity
+        |used-by
+        |version">
+<!ENTITY % content.definition
+	"(%elements.definition;)*">
+
+<!ENTITY % elements.description
+	"comment
+        |dl
+        |note
+        |ol
+        |para
+        |ul">
+<!ENTITY % content.description
+	"(%elements.description;)*">
+
+<!ENTITY % elements.dl
+	"dd
+        |dt">
+<!ENTITY % content.dl
+	"(%elements.dl;)*">
+
+<!ENTITY % elements.dt
+	"b
+        |i
+        |literal
+        |ref">
+<!ENTITY % content.dt
+	"(%elements.dt;)*">
+
+<!ENTITY % elements.example
+	"comment
+        |text">
+<!ENTITY % content.example
+	"(title?,
+        (%elements.example;)*)">
+
+<!ENTITY % elements.flag
+	"comment">
+<!ENTITY % content.flag
+	"(#PCDATA
+        |%elements.flag;)*">
+
+<!ENTITY % elements.flags
+	"comment
+        |flag">
+<!ENTITY % content.flags
+	"(%elements.flags;)*">
+
+<!ENTITY % elements.i
+	"b
+        |literal">
+<!ENTITY % content.i
+	"(#PCDATA
+        |%elements.i;)*">
+
+<!ENTITY % elements.item
+	"">
+<!ENTITY % content.item
+	"(name,
+        comment*,
+        definition+,
+        (comment | definition)*,
+        comment*)">
+
+<!ENTITY % elements.lexicon
+	"comment
+        |item
+        |title">
+<!ENTITY % content.lexicon
+	"(%elements.lexicon;)*">
+
+<!ENTITY % elements.li
+	"b
+        |i
+        |literal
+        |ref">
+<!ENTITY % content.li
+	"(#PCDATA
+	|%elements.li;)*">
+<!ENTITY % elements.literal
+	"b
+        |comment
+        |i
+        |ref
+        |var">
+<!ENTITY % content.literal
+	"(#PCDATA
+        |%elements.literal;)*">
+
+<!ENTITY % elements.name
+	"comment
+        |literal
+        |type
+        |var">
+<!ENTITY % content.name
+	"(#PCDATA
+        |%elements.name;)*">
+
+<!ENTITY % elements.note
+	"b
+        |comment
+        |i
+        |literal
+        |ref
+        |var">
+<!ENTITY % content.note
+	"(#PCDATA
+        |%elements.note;)*">
+
+<!ENTITY % elements.ol
+	"li">
+<!ENTITY % content.ol
+	"(%elements.ol;)*">
+
+<!ENTITY % elements.para
+	"b
+        |comment
+        |i
+        |literal
+        |ref
+        |var">
+<!ENTITY % content.para
+	"(#PCDATA
+        |%elements.para;)*">
+
+<!ENTITY % elements.ref
+	"comment">
+<!ENTITY % content.ref
+	"(#PCDATA
+        |%elements.ref;)*">
+
+<!ENTITY % elements.response
+	"comment
+        |action">
+<!ENTITY % content.response
+	"(%elements.response;)*">
+
+<!ENTITY % elements.returns
+	"comment
+        |ref
+        |type">
+<!ENTITY % content.returns
+	"(#PCDATA
+        |%elements.returns;)*">
+
+<!ENTITY % elements.seealso
+	"ref">
+<!ENTITY % content.seealso
+	"(%elements.seealso;)+">
+
+<!ENTITY % elements.severity
+	"comment">
+<!ENTITY % content.severity
+	"(#PCDATA
+        |%elements.severity;)*">
+
+<!ENTITY % elements.text
+	"comment
+        |literal
+	|ref
+        |var">
+<!ENTITY % content.text
+	"(#PCDATA
+        |%elements.text;)*">
+
+<!ENTITY % elements.title
+	"comment
+        |literal
+        |ref
+        |type">
+<!ENTITY % content.title
+	"(#PCDATA
+        |%elements.title;)*">
+
+<!ENTITY % elements.type
+	"comment">
+<!ENTITY % content.type
+	"(#PCDATA
+        |%elements.type;)*">
+
+<!ENTITY % elements.ul
+	"li">
+<!ENTITY % content.ul
+	"(%elements.ul;)*">
+
+<!ENTITY % elements.used-by
+	"comment
+        |literal
+        |ref">
+<!ENTITY % content.used-by
+	"(#PCDATA
+        |%elements.used-by;)*">
+
+<!ENTITY % elements.codelist
+	"comment
+        |ref
+        |type
+        |var">
+
+<!ENTITY % elements.var
+	"comment
+        |ref">
+<!ENTITY % content.var
+	"(#PCDATA
+        |%elements.var;)*">
+
+<!ENTITY % elements.version
+	"comment">
+<!ENTITY % content.version
+	"(#PCDATA
+        |%elements.version;)*">
+
+<!-- Okey, time to make the doughnuts - I mean, the elements.
+-->
+
+<!ELEMENT action %content.action;>
+<!ELEMENT b %content.b;>
+<!ELEMENT comment %content.comment;>
+<!ELEMENT declaration %content.declaration;>
+<!ELEMENT defined-by %content.defined-by;>
+<!ELEMENT definition %content.definition;>
+<!ATTLIST definition
+	href	CDATA	#IMPLIED>
+<!ELEMENT description %content.description;>
+<!ATTLIST description
+	href	CDATA	#IMPLIED>
+<!ELEMENT dd %content.dd;>
+<!ELEMENT dl %content.dl;>
+<!ATTLIST dl
+	compact (compact) #IMPLIED>
+<!ELEMENT dt %content.dt;>
+<!ELEMENT example %content.example;>
+<!ELEMENT flag %content.flag;>
+<!ELEMENT flags %content.flags;>
+<!ELEMENT i %content.i;>
+<!ELEMENT item %content.item;>
+<!ATTLIST item
+	id	ID	#IMPLIED
+	type	CDATA	#REQUIRED>
+<!ELEMENT lexicon %content.lexicon;>
+<!ATTLIST lexicon
+	name	CDATA	#IMPLIED> <!-- Identifying name for the dictionary -->
+<!ELEMENT li %content.li;>
+<!ELEMENT literal %content.literal;>
+<!ELEMENT name %content.name;>
+<!ELEMENT note %content.note;>
+<!ELEMENT ol %content.ol;>
+<!ELEMENT para %content.para;>
+<!ELEMENT ref %content.ref;>
+<!ATTLIST ref
+	href	CDATA	#IMPLIED>
+<!ELEMENT response %content.response;>
+<!ELEMENT returns %content.returns;>
+<!ELEMENT seealso %content.seealso;>
+<!ELEMENT severity %content.severity;>
+<!ELEMENT text %content.text;>
+<!ELEMENT title %content.title;>
+<!ELEMENT type %content.type;>
+<!ELEMENT ul %content.ul;>
+<!ELEMENT used-by %content.used-by;>
+<!ELEMENT var %content.var;>
+<!ELEMENT version %content.version;>

Propchange: httpd/site/trunk/docs/dev/apidoc/ap-dict.dtd
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpd/site/trunk/docs/dev/apidoc/ap-dict.dtd
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: httpd/site/trunk/docs/dev/apidoc/ap-dict.dtd
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: httpd/site/trunk/docs/dev/apidoc/api-dict.html
URL: http://svn.apache.org/viewvc/httpd/site/trunk/docs/dev/apidoc/api-dict.html?rev=821352&view=auto
==============================================================================
--- httpd/site/trunk/docs/dev/apidoc/api-dict.html (added)
+++ httpd/site/trunk/docs/dev/apidoc/api-dict.html [utf-8] Sat Oct  3 16:20:11 2009
@@ -0,0 +1,41 @@
+<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"
+ "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+ <head>
+  <title>Apache Web server 1.3 API Dictionary</title>
+  <!-- $Generated by:$ -->
+ </head>
+<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
+ <body
+  bgcolor="#ffffff"
+  text="#000000"
+  link="#0000ff"
+  vlink="#000080"
+  alink="#ff0000"
+ >
+<!--#include virtual="header.html" -->
+  <h1 align="center">Apache Web server 1.3 API Dictionary</h1>
+  <blockquote>
+   <b>
+    The intent of this and the related pages is to provide definitive
+    documentation for the Apache Web server API (application programming
+    interface) for version 1.3.  Unfortunately, it does not yet live
+    up to that intention,
+    but it's something, anyway.
+    This file is <!--very much--> under construction.  <!--You should not take
+    anything you find in it at face value.-->
+   </b>
+  </blockquote>
+<!-- DO NOT EDIT BELOW THIS LINE.  The contents of this file between -->
+<!-- the sentinel lines is generated by a script, so any edits here  -->
+<!-- will be lost the next time the script is run.                   -->
+<!-- %%BEGIN%% -->
+
+<!-- %%END%% -->
+<!-- DO NOT EDIT ABOVE THIS LINE.  The contents of this file between -->
+<!-- the sentinel lines is generated by a script, so any edits here  -->
+<!-- will be lost the next time the script is run.                   -->
+
+<!--#include virtual="footer.html" -->
+ </body>
+</html>

Propchange: httpd/site/trunk/docs/dev/apidoc/api-dict.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpd/site/trunk/docs/dev/apidoc/api-dict.html
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: httpd/site/trunk/docs/dev/apidoc/api-dict.html
------------------------------------------------------------------------------
    svn:mime-type = text/html

Added: httpd/site/trunk/docs/dev/apidoc/api-dict.html.bak
URL: http://svn.apache.org/viewvc/httpd/site/trunk/docs/dev/apidoc/api-dict.html.bak?rev=821352&view=auto
==============================================================================
--- httpd/site/trunk/docs/dev/apidoc/api-dict.html.bak (added)
+++ httpd/site/trunk/docs/dev/apidoc/api-dict.html.bak Sat Oct  3 16:20:11 2009
@@ -0,0 +1,41 @@
+<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"
+ "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+ <head>
+  <title>Apache Web server 1.3 API Dictionary</title>
+  <!-- $Generated by:$ -->
+ </head>
+<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
+ <body
+  bgcolor="#ffffff"
+  text="#000000"
+  link="#0000ff"
+  vlink="#000080"
+  alink="#ff0000"
+ >
+<!--#include virtual="header.html" -->
+  <h1 align="center">Apache Web server 1.3 API Dictionary</h1>
+  <blockquote>
+   <b>
+    The intent of this and the related pages is to provide definitive
+    documentation for the Apache Web server API (application programming
+    interface) for version 1.3.  Unfortunately, it does not yet live
+    up to that intention,
+    but it's something, anyway.
+    This file is <!--very much--> under construction.  <!--You should not take
+    anything you find in it at face value.-->
+   </b>
+  </blockquote>
+<!-- DO NOT EDIT BELOW THIS LINE.  The contents of this file between -->
+<!-- the sentinel lines is generated by a script, so any edits here  -->
+<!-- will be lost the next time the script is run.                   -->
+<!-- %%BEGIN%% -->
+
+<!-- %%END%% -->
+<!-- DO NOT EDIT ABOVE THIS LINE.  The contents of this file between -->
+<!-- the sentinel lines is generated by a script, so any edits here  -->
+<!-- will be lost the next time the script is run.                   -->
+
+<!--#include virtual="footer.html" -->
+ </body>
+</html>