Modified: qpid/site/input/index.html.in
URL: 
http://svn.apache.org/viewvc/qpid/site/input/index.html.in?rev=1707005&r1=1707004&r2=1707005&view=diff
==============================================================================
--- qpid/site/input/index.html.in (original)
+++ qpid/site/input/index.html.in Tue Oct  6 11:38:27 2015
@@ -7,7 +7,7 @@
     <p>Apache Qpid&#8482; makes messaging tools that speak AMQP
       and support many languages and platforms.</p>
 
-    <p><a href="{{site_url}}/amqp.html">AMQP</a> is an open
+    <p><a href="{{site_url}}/amqp/index.html">AMQP</a> is an open
       internet protocol for reliably sending and receiving
       messages.  It makes it possible for everyone to build a
       diverse, coherent messaging ecosystem.</p>

Modified: qpid/site/input/resources.md
URL: 
http://svn.apache.org/viewvc/qpid/site/input/resources.md?rev=1707005&r1=1707004&r2=1707005&view=diff
==============================================================================
--- qpid/site/input/resources.md (original)
+++ qpid/site/input/resources.md Tue Oct  6 11:38:27 2015
@@ -29,7 +29,7 @@ would like your blog linked here.
 
  - [AMQP Illustrated](https://chugrolke.wordpress.com/) by Chuck Rolke
  - [Dial M for Messaging](http://dialmformessaging.blogspot.com/) by Mick 
Goulish
- - [IPBabble](http://www.ipbabble.com/) by William Henry
+ - [NETPROTOTALK](https://netprototalk.wordpress.com/) by Ted Ross
  - [Rajith's Column](http://rajith.2rlabs.com/) by Rajith Attapattu
  - [Steve Huston's Networked Programming 
Blog](http://stevehuston.wordpress.com/)
  - [The Infobahn Offramp](http://mcpierce.blogspot.com/search/label/messaging) 
by Darryl Pierce

Added: qpid/site/misc/amqp/messaging.xml
URL: 
http://svn.apache.org/viewvc/qpid/site/misc/amqp/messaging.xml?rev=1707005&view=auto
==============================================================================
Binary file - no diff available.

Propchange: qpid/site/misc/amqp/messaging.xml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: qpid/site/misc/amqp/security.xml
URL: 
http://svn.apache.org/viewvc/qpid/site/misc/amqp/security.xml?rev=1707005&view=auto
==============================================================================
Binary file - no diff available.

Propchange: qpid/site/misc/amqp/security.xml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: qpid/site/misc/amqp/transactions.xml
URL: 
http://svn.apache.org/viewvc/qpid/site/misc/amqp/transactions.xml?rev=1707005&view=auto
==============================================================================
Binary file - no diff available.

Propchange: qpid/site/misc/amqp/transactions.xml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: qpid/site/misc/amqp/transport.xml
URL: 
http://svn.apache.org/viewvc/qpid/site/misc/amqp/transport.xml?rev=1707005&view=auto
==============================================================================
Binary file - no diff available.

Propchange: qpid/site/misc/amqp/transport.xml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: qpid/site/misc/amqp/types.xml
URL: 
http://svn.apache.org/viewvc/qpid/site/misc/amqp/types.xml?rev=1707005&view=auto
==============================================================================
Binary file - no diff available.

Propchange: qpid/site/misc/amqp/types.xml
------------------------------------------------------------------------------
    svn:mime-type = application/xml

Added: qpid/site/scripts/gen-amqp-type-reference
URL: 
http://svn.apache.org/viewvc/qpid/site/scripts/gen-amqp-type-reference?rev=1707005&view=auto
==============================================================================
--- qpid/site/scripts/gen-amqp-type-reference (added)
+++ qpid/site/scripts/gen-amqp-type-reference Tue Oct  6 11:38:27 2015
@@ -0,0 +1,1090 @@
+#!/usr/bin/env python
+#
+# Version 0.3
+# Original work by Chuck Rolke
+
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+# This code reads the AMQP 1.0 xml definitions and presents organized
+# and cross referenced content in a web page.
+#
+# Originally this was to run in the proton-c source area but those
+# xml files had the label fields stripped. The label fields add a lot
+# to the result and so the source spec xml was hacked yet again for
+# this work.
+
+# The page layout generally follows the layout of the AMQP 1.0 spec.
+#
+# TODO: scavenge the ascii art from <doc> sections
+# TODO: this code generates index data while printing table data.
+#       clean this up.
+#
+
+from __future__ import print_function
+import sys, optparse, os, time
+import xml.etree.ElementTree as ET
+
+#
+#
+def log(text):
+    print("LOG: ", text, file=sys.stderr)
+
+
+#
+# construct data stores
+typesPrimitive = []  # class == primitive
+typesEnumerated = [] # no descriptor, choice count > 0
+typesRestricted = [] # no descriptor, choice count == 0
+typesDescribed = []  # contains descriptor
+
+typesAll = {}    # table[typename] = typenode for clean types
+
+#
+# indices computed while generating page
+typeNameIndex = []
+typeIndex = {}     # key='name', value = [list of types]
+
+fieldNameIndex = []
+fieldIndex = {}
+
+enumNameIndex = [] # names of enum values (not types)
+enumIndex = {}
+
+grandNameIndex = []
+grandIndex = {}
+
+xrefNameIndex = []
+xrefIndex = {}
+
+#
+# provided types indexed by name of provided type, value is list of provider 
types
+providedtypenames = []
+provided = {} # {'name' : [type, type] with provides=name
+
+#
+# definition objects are constants
+definitionsAll = []
+
+#
+# stats
+class Stats():
+    def __init__(self):
+        self.nConstants = 0
+        self.nPrimitiveEncodings = 0
+        self.nEnumeratedTypes = 0
+        self.nRestrictedTypes = 0
+        self.nDescribedTypes = 0
+        self.nProvidedTypes = 0
+        self.nIndexedTypes = 0
+        self.nIndexedFields = 0
+        self.nIndexedEnumerations = 0
+        self.nIndexedGrand = 0
+        self.nIndexedXrefs = 0
+
+    def log(self):
+        log("STAT: nConstants           = %s" % self.nConstants)
+        log("STAT: nPrimitiveEncodings  = %s" % self.nPrimitiveEncodings)
+        log("STAT: nEnumeratedTypes     = %s" % self.nEnumeratedTypes)
+        log("STAT: nRestrictedTypes     = %s" % self.nRestrictedTypes)
+        log("STAT: nDescribedTypes      = %s" % self.nDescribedTypes)
+        log("STAT: nProvidedTypes       = %s" % self.nProvidedTypes)
+        log("STAT: nIndexedTypes        = %s" % self.nIndexedTypes)
+        log("STAT: nIndexedFields       = %s" % self.nIndexedFields)
+        log("STAT: nIndexedEnumerations = %s" % self.nIndexedEnumerations)
+        log("STAT: nIndexedGrand        = %s" % self.nIndexedGrand)
+        log("STAT: nIndexedXrefs        = %s" % self.nIndexedXrefs)
+
+    def statCheck(self, name, expectedValue):
+        currentValue = getattr(self, name)
+        if not currentValue == expectedValue:
+            log("WARNING stat %s expected %s but is actaully %s" % (name, 
expectedValue, currentValue))
+
+stats = Stats()
+
+class XmlStore():
+    def __init__(self, file_path):
+        self.tree = ET.parse(file_path)
+        self.root = self.tree.getroot()  # root=Element 'amqp'
+        self.trimNamespace(self.root)
+        self.rootName = self.root.get("name")
+        self.sections = self.root.findall("section")
+        self.types = []
+        self.definitions = []
+        for section in self.sections:
+            ltypes = section.findall("type")
+            for type in ltypes:
+                # decorate and categorize each type
+                typesAll[type.get("name")] = type
+                type.text = self.rootName + ":" + section.get("name")
+                if type.get("class") == "primitive":
+                    typesPrimitive.append(type)
+                else:
+                    descr = type.find("descriptor")
+                    if descr is None:
+                        choices = type.find("choice")
+                        if choices is None:
+                            typesRestricted.append(type)
+                        else:
+                            typesEnumerated.append(type)                       
     
+                    else:
+                        typesDescribed.append(type)
+                provides = type.get("provides")
+                if provides is not None and not provides == "":
+                    providelist = provides.replace(' ','').split(',')
+                    for p in providelist:
+                        if not p in provided:
+                            providedtypenames.append(p)
+                            provided[p] = []
+                        provided[p].append(type)
+            self.types += section.findall("type")
+            ldefs = section.findall("definition")
+            for definition in ldefs:
+                #log("definition %s" % definition.get("name"))
+                definition.text = self.rootName + ":" + section.get("name")
+                definitionsAll.append(definition)
+            self.definitions += section.findall("definition")
+        
+    def trimNamespace(self, node):
+        ''' Strip out the "{amqp namespace}" ahead of each tag'''
+        pos = node.tag.find("}")
+        if pos > 0:
+            node.tag = node.tag[pos+1:]
+        for child in node:
+            self.trimNamespace(child)
+
+file_dir = sys.argv[1]
+
+xmlTypes        = XmlStore(os.path.join(file_dir, "types.xml"))
+xmlTransport    = XmlStore(os.path.join(file_dir, "transport.xml"))
+xmlMessaging    = XmlStore(os.path.join(file_dir, "messaging.xml"))
+xmlSecurity     = XmlStore(os.path.join(file_dir, "security.xml"))
+xmlTransactions = XmlStore(os.path.join(file_dir, "transactions.xml"))
+
+#
+# Utilities
+#
+#
+class ExitStatus(Exception):
+    """Raised if a command wants a non-0 exit status from the script"""
+    def __init__(self, status): self.status = status
+
+def nbsp():
+    return "&#160;"
+
+def lozenge():
+    return "&#9674;"
+
+def double_lozenge():
+    return lozenge() + lozenge()
+
+def extract_descr_type_code(code):
+    return "0x" + code[19:]
+
+def noNoneString(str):
+    if str:
+        return str
+    return ""
+
+def noNoneTypeRef(str):
+    if str and not str == "":
+        res = "<a href=\"#TYPE_%s\">%s</a>" % (str, str)
+        return res
+    return ""
+
+def noNoneProvideRef(str):
+    if str and not str == "":
+        res = ""
+        mylist = str.replace(' ','').split(',')
+        for e in mylist:
+            res += "<a href=\"#PROVIDEDTYPE_%s\">%s</a> " % (e, e)
+        return res
+    return ""
+
+def addToIndex(name, section):
+    if not name in typeNameIndex:
+        typeNameIndex.append(name)
+        typeIndex[name] = []
+    typeIndex[name].append(section)
+
+def addToFieldIndex(name, parentsection, parenttype):
+    if not name in fieldNameIndex:
+        fieldNameIndex.append(name)
+        fieldIndex[name] = []
+    fieldIndex[name].append( [parentsection, parenttype] )
+
+def addToEnumIndex(name, parentsection, parenttype):
+    if not name in enumNameIndex:
+        enumNameIndex.append(name)
+        enumIndex[name] = []
+    enumIndex[name].append( [parentsection, parenttype] )
+
+def addToGrandIndex(name, decoratedname, category, psect, ptype):
+    if not name in grandNameIndex:
+        grandNameIndex.append(name)
+        grandIndex[name] = []
+    grandIndex[name].append( [decoratedname, category, psect, ptype] )
+
+def addToXrefIndex(name, decReferrerName, category, referrerSection):
+    if not name in xrefNameIndex:
+        xrefNameIndex.append(name)
+        xrefIndex[name] = []
+    xrefIndex[name].append( [decReferrerName, category, referrerSection] )
+
+#
+#
+def print_start_body():
+    print ("""<script 
src="http://ajax.googleapis.com/ajax/libs/dojo/1.4/dojo/dojo.xd.js"; 
type="text/javascript"></script>
+<!-- <script 
src="http://ajax.googleapis.com/ajax/libs/dojo/1.4/dojo/dojo.xd.js"; 
type="text/javascript"></script> -->
+<!--
+ -
+ - Licensed to the Apache Software Foundation (ASF) under one
+ - or more contributor license agreements.  See the NOTICE file
+ - distributed with this work for additional information
+ - regarding copyright ownership.  The ASF licenses this file
+ - to you under the Apache License, Version 2.0 (the
+ - "License"); you may not use this file except in compliance
+ - with the License.  You may obtain a copy of the License at
+ -
+ -   http://www.apache.org/licenses/LICENSE-2.0
+ -
+ - Unless required by applicable law or agreed to in writing,
+ - software distributed under the License is distributed on an
+ - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ - KIND, either express or implied.  See the License for the
+ - specific language governing permissions and limitations
+ - under the License.
+ -
+-->
+<script type="text/javascript">
+function node_is_visible(node)
+{
+  if(dojo.isString(node))
+    node = dojo.byId(node);
+  if(!node) 
+    return false;
+  return node.style.display == "block";
+}
+function set_node(node, str)
+{
+  if(dojo.isString(node))
+    node = dojo.byId(node);
+  if(!node) return;
+  node.style.display = str;
+}
+function toggle_node(node)
+{
+  if(dojo.isString(node))
+    node = dojo.byId(node);
+  if(!node) return;
+  set_node(node, (node_is_visible(node)) ? 'none' : 'block');
+}
+function hide_node(node)
+{
+  set_node(node, 'none');
+}
+function show_node(node)
+{
+  set_node(node, 'block');
+}
+
+function go_back()
+{
+  window.history.back();
+}
+""")
+
+    print("function show_all_tables()")
+    print("{")
+    print("  show_node('Constants');")
+    print("  show_node('PrimTypeName');")
+    print("  show_node('DescrTypes');")
+    print("  show_node('EnumTypes');")
+    print("  show_node('RestrTypes');")
+    print("  show_node('ProvTypes');")
+    print("  show_node('TypIndex');")
+    print("  show_node('FldIndex');")
+    print("  show_node('EnuIndex');")
+    print("  show_node('GndIndex');")
+    print("  show_node('XrefIndex');")
+    for type in typesDescribed:
+        print("  show_node('DT%s')" % type.get("name"))
+    for type in typesEnumerated:
+        print("  show_node('ET%s')" % type.get("name"))
+    print("}")
+    print("")
+    print("function hide_all_tables()")
+    print("{")
+    print("  hide_node('Constants');")
+    print("  hide_node('PrimTypeName');")
+    print("  hide_node('DescrTypes');")
+    print("  hide_node('EnumTypes');")
+    print("  hide_node('RestrTypes');")
+    print("  hide_node('ProvTypes');")
+    print("  hide_node('TypIndex');")
+    print("  hide_node('FldIndex');")
+    print("  hide_node('EnuIndex');")
+    print("  hide_node('GndIndex');")
+    print("  hide_node('XrefIndex');")
+    for type in typesDescribed:
+        print("  show_node('DT%s')" % type.get("name"))
+    for type in typesEnumerated:
+        print("  show_node('ET%s')" % type.get("name"))
+    print("}")
+
+    print ("</script>")
+
+#
+#
+def print_toc():
+    # Table of Contents
+    print("<a href=\"#Constants\">Constants</a><br/>")
+    print("<a href=\"#Types\">Types</a><br/>")
+    print("%s%s<a href=\"#PrimitiveTypes\">Primitive Types</a><br/>" % 
(nbsp(), nbsp()))
+    print("%s%s<a href=\"#EnumeratedTypes\">Enumerated Types</a><br/>" % 
(nbsp(), nbsp()))
+    print("%s%s<a href=\"#RestrictedTypes\">Restricted Types</a><br/>" % 
(nbsp(), nbsp()))
+    print("%s%s<a href=\"#DescribedTypes\">Described Types</a><br/>" % 
(nbsp(), nbsp()))
+    print("%s%s<a href=\"#ProvidedTypes\">Provided Types</a><br/>" % (nbsp(), 
nbsp()))
+    print("<a href=\"#Indices\">Indices</a><br/>")
+    print("%s%s<a href=\"#TypeIndex\">Types</a><br/>" % (nbsp(), nbsp()))
+    print("%s%s<a href=\"#FieldIndex\">Fields</a><br/>" % (nbsp(), nbsp()))
+    print("%s%s<a href=\"#EnumerationIndex\">Enumerations</a><br/>" % (nbsp(), 
nbsp()))
+    print("%s%s<a href=\"#GrandIndex\">Grand Index</a><br/>" % (nbsp(), 
nbsp()))
+    print("%s%s<a href=\"#XrefIndex3\">Type Cross Reference</a><br/>" % 
(nbsp(), nbsp()))
+
+    print("<hr/>")
+    print("<strong>NOTE: Tables must be expanded or internal hyperlinks don't 
work.</strong><br/>")
+    print("<a href=\"javascript:show_all_tables()\"> %s </a>%sTable view: 
expand all.<br/>" % (lozenge(), nbsp()))
+    print("<a href=\"javascript:hide_all_tables()\"> %s </a>%sTable view: 
collapse all." % (lozenge(), nbsp()))
+    print("<hr/>")
+
+
+def print_constants():
+    # print types sorted by class name
+    print("<a name=\"Constants\"></a>")
+    print("<h2>Constants</h2>")
+    print("<a href=\"javascript:toggle_node('%s')\"> %s </a>%sConstants<br/>" 
% ("Constants", lozenge(), nbsp()))
+    print("<div width=\"100%%\" style=\"display:none\"  margin-bottom:\"2px\" 
id=\"Constants\">")
+    print("<table>")
+    print("<tr>")
+    print(" <th>Section</th>")
+    print(" <th>Name</th>")
+    print(" <th>Value</th>")
+    print(" <th>Label</th>")
+    print("</tr>")
+    for definition in definitionsAll:
+        print("<tr>")
+        print(" <td>%s</td>" % definition.text)
+        print(" <td><a name=\"TYPE_%s\"></a><strong>%s</strong></td>" % 
(definition.get("name"),definition.get("name")))
+        print(" <td>%s</td>" % definition.get("value"))
+        print(" <td>%s</td>" % definition.get("label"))
+        print("</tr>")
+        addToIndex(definition.get("name"), definition.text) # Constants
+        stats.nConstants += 1
+    print("</table>")
+    print("</div>")
+    print("<br/>")
+
+
+#
+#
+encoding_typenames = []
+encoding_codes = []
+encoding_typemap = {}
+encoding_codemap = {}
+encoding_sectionmap = {}
+
+def compute_primitive_types():
+    # create sorted lists for display
+    for type in typesPrimitive:
+        for enc in type.findall("encoding"):
+            typename = type.get("name")
+            if enc.get("name") is not None:
+                typename += ":" + enc.get("name")
+            typecode = enc.get("code")
+            enc.text = typename
+            if not typename in encoding_typenames:
+                encoding_typenames.append(typename)
+                encoding_codes.append(typecode)
+                encoding_typemap[typename] = enc
+                encoding_codemap[typecode] = enc
+                encoding_sectionmap[typename] = type.text
+            else:
+                raise ValueError("duplicate encoding type name: '%s'" % 
typename)
+    encoding_typenames.sort()
+    encoding_codes.sort()
+
+def print_primitive_types():
+    # print types sorted by class name
+    print("<a name=\"Types\"></a>")
+    print("<h2>Types</h2>")
+    print("<a name=\"PrimitiveTypes\"></a>")
+    print("<h3>Primitive Types</h3>")
+    print("<a href=\"javascript:toggle_node('%s')\"> %s </a>%sby Name<br/>" % 
("PrimTypeName", lozenge(), nbsp()))
+    print("<div width=\"100%%\" style=\"display:none\"  margin-bottom:\"2px\" 
id=\"PrimTypeName\">")
+    print("<table>")
+    print("<tr>")
+    print(" <th>Section</th>")
+    print(" <th>Name</th>")
+    print(" <th>Code</th>")
+    print(" <th>Category</th>")
+    print(" <th>Width</th>")
+    print(" <th>Label</th>")
+    print("</tr>")
+    for type in typesPrimitive:
+        print("<tr>")
+        print(" <td>%s</td>" % type.text)
+        print(" <td><a name=\"TYPE_%s\"></a><strong>%s</strong></td>" % 
(type.get("name"), type.get("name")))
+        print(" <td></td>")
+        print(" <td></td>")
+        print(" <td></td>")
+        print(" <td>%s</td>" % type.get("label"))
+        print("</tr>")
+        addToIndex(type.get("name"), type.text) # Primitive category
+        for enc in type.findall("encoding"):
+            print("<tr>")
+            print(" <td></td>")
+            print(" <td><a name=\"TYPE_%s\"></a><strong>%s</strong></td>" % 
(enc.text, enc.text))
+            print(" <td>%s</td>" % enc.get("code"))
+            print(" <td>%s</td>" % enc.get("category"))
+            print(" <td>%s</td>" % enc.get("width"))
+            print(" <td>%s</td>" % enc.get("label"))
+            print("</tr>")
+            addToIndex(enc.text, "types:encodings") # Primitive type
+            stats.nPrimitiveEncodings += 1
+    # Phony primitive type "*"
+    print("<tr>")
+    print(" <td>spec:wildcard</td>")
+    print(" <td><a name=\"TYPE_*\"><strong>*</strong></a></td>")
+    print(" <td></td>")
+    print(" <td></td>")
+    print(" <td></td>")
+    print(" <td>A value of any type is permitted.</td>")
+    print("</tr>")
+    print("</table>")
+    print("</div>")
+    print("<br/>")
+
+    # print types sorted by class code
+    print("<a href=\"javascript:toggle_node('%s')\"> %s </a>%sby Code<br/>" % 
("PrimTypeCode", lozenge(), nbsp()))
+    print("<div width=\"100%%\" style=\"display:none\"  margin-bottom:\"2px\" 
id=\"PrimTypeCode\">")
+    print("<table>")
+    print("<tr>")
+    print(" <th>Section</th>")
+    print(" <th>Name</th>")
+    print(" <th>Code</th>")
+    print(" <th>Category</th>")
+    print(" <th>Width</th>")
+    print(" <th>Label</th>")
+    print("</tr>")
+    for code in encoding_codes:
+        enc = encoding_codemap[code]
+        print("<tr>")
+        print(" <td>%s</td>" % "types:encodings")
+        print(" <td><strong>%s</strong></td>" % enc.text)
+        print(" <td>%s</td>" % enc.get("code"))
+        print(" <td>%s</td>" % enc.get("category"))
+        print(" <td>%s</td>" % enc.get("width"))
+        print(" <td>%s</td>" % enc.get("label"))
+        print("</tr>")
+    print("</table>")
+    print("</div>")
+    print("<br/>")
+
+
+#
+#
+descr_longnames = []   # "transport:performatives open"
+descr_codes = []       # "0x10"
+descr_codemap = {}     # map[longname] = "0x10"
+descr_mapcode = {}     # map[code] = longname
+descr_typemap = {}     # map[longname] = type node
+descr_fieldmap = {}    # map[longname] = [list-of-field-nodes]
+descr_fieldindex = []  # list of (fieldname, field's_parent_type_node)
+# TODO: get the provides info
+def compute_described_types():
+    for type in typesDescribed:
+        descriptor = type.find("descriptor")
+        descr_name = descriptor.get("name")
+        descr_code = extract_descr_type_code(descriptor.get("code"))
+        fields = type.findall("field")
+        longname = type.text + " " + type.get("name")
+        descr_longnames.append(longname)
+        descr_codes.append(descr_code)
+        descr_codemap[longname] = descr_code
+        descr_mapcode[descr_code] = longname
+        descr_typemap[longname] = type
+        if fields is not None:
+            descr_fieldmap[longname] = fields
+            for field in fields:
+                descr_fieldindex.append( (field.get("name"), type) )
+    descr_codes.sort()
+
+
+#
+#
+def print_described_types():
+    print("<a name=\"DescribedTypes\"></a>")
+    print("<h3>Described Types</h3>")
+    print("<a href=\"javascript:toggle_node('%s')\"> %s </a>%sDescribed 
Types<br/>" % ("DescrTypes", lozenge(), nbsp()))
+    print("<div width=\"100%%\" style=\"display:none\"  margin-bottom:\"2px\" 
id=\"DescrTypes\">")
+    print("<table>")
+    print("<tr>")
+    print(" <th>Section</th>")
+    print(" <th>Name</th>")
+    print(" <th>Code</th>")
+    print(" <th>Type</th>")
+    print(" <th>Provides</th>")
+    print(" <th>Label</th>")
+    print("</tr>")
+    for code in descr_codes:
+        name = descr_mapcode[code]
+        descr_key = name.split()
+        section = descr_key[0]
+        descr_typename = descr_key[1]
+        type = descr_typemap[name]
+        print("<tr id=\"TYPE_%s\">" % descr_typename)
+        print(" <td>%s</td>" % section)
+        print(" <td><a href=\"#details_%s\"><strong>%s</strong></a></td>" % 
(descr_typename, descr_typename))
+        print(" <td>%s</td>" % code)
+        print(" <td><a href=\"#TYPE_%s\">%s</a></td>" % (type.get("source"), 
type.get("source")))
+        print(" <td>%s</td>" % noNoneProvideRef(type.get("provides")))
+        print(" <td>%s</td>" % noNoneString(type.get("label")))
+        print("</tr>")
+        addToIndex(descr_typename, section) # Described
+        stats.nDescribedTypes += 1
+    print("</table>")
+    print("<br/>")
+
+    for code in descr_codes:
+        name = descr_mapcode[code]
+        descr_key = name.split()
+        section = descr_key[0]
+        descr_typename = descr_key[1]
+        type = descr_typemap[name]
+        print("<a name=\"details_%s\"></a>" % descr_typename)
+        print("%s%s<a href=\"javascript:toggle_node('%s')\"> %s </a>%s 
%s<strong><a href=\"#TYPE_%s\">%s</a></strong><br/>" % \
+              (nbsp(), nbsp(), "DT"+descr_typename, lozenge(), nbsp(), 
"Described type: " + section + " - ", descr_typename, descr_typename))
+        print("<div width=\"100%%\" style=\"display:none\"  
margin-bottom:\"2px\" id=\"%s\">" % ("DT"+descr_typename))
+        print("<table>")
+        print("<tr>")
+        print(" <th>Tag</th>")
+        print(" <th>Name</th>")
+        print(" <th>Type</th>")
+        print(" <th>Requires</th>")
+        print(" <th>Default</th>")
+        print(" <th>Mandatory</th>")
+        print(" <th>Multiple</th>")
+        print(" <th>Label</th>")
+        print("</tr>")
+        for child in type:
+            childtag = ""
+            childtype = ""
+            printthis = True
+            if child.tag == "field":
+                childtype = child.get("type")
+                childlabel = noNoneString(child.get("label"))
+                childname ="<a id=\"FIELD_%s_%s\">%s</a>" % (descr_typename, 
child.get("name"), child.tag)
+                childtag = " <td>%s</td>" % (childname)
+                addToFieldIndex(child.get("name"), section, descr_typename)
+            elif child.tag == "descriptor":
+                childlabel = noNoneString(type.get("label"))
+                childtag = " <td>%s</td>" % child.tag
+            else:
+                printthis = False
+            if printthis:
+                print("<tr>")
+                print("%s" % childtag)
+                print(" <td><strong>%s</strong></td>" % child.get("name"))
+                print(" <td><a href=\"#TYPE_%s\">%s</a></td>" % (childtype, 
childtype))
+                print(" <td>%s</td>" % noNoneProvideRef(child.get("requires")))
+                print(" <td>%s</td>" % noNoneString(child.get("default")))
+                print(" <td>%s</td>" % noNoneString(child.get("mandatory")))
+                print(" <td>%s</td>" % noNoneString(child.get("multiple")))
+                print(" <td>%s</td>" % childlabel)
+                print("</tr>")
+        print("</table>")
+        print("<br/>")
+        print("</div>")  # End one described type
+   
+    print("</div>")   # End described type details
+    print("<br/>")
+
+
+#
+#
+enum_longnames = []    # "messaging:message-format terminus-durability"
+enum_typemap = {}      # map[longname] = type node
+enum_choicemap = {}    # map[longname] = [list-of-choice-fields]
+enum_choiceindex = {}  # list of (choicename, choice's_parent_type_node)
+
+def compute_enumerated_types():
+    #log("typesEnumerated: %s" % typesEnumerated)
+    for type in typesEnumerated:
+        #log("processing enum %s" % type.get("name"))
+        longname = type.text + " " + type.get("name")
+        enum_longnames.append(longname)
+        enum_typemap[longname] = type
+        #        if choices is not None:
+        #            enum_choicemap[longname] = choices
+        #            for choice in choices:
+        #                log("processing enum choice %s" % choice.get("name"))
+        #                enum_choiceindex.append( (choice.get("name"), type) )
+        choices = []
+        for child in type:
+            if child.tag == "choice":
+                choices += child
+                enum_choiceindex[child.get("name")] = type
+                addToEnumIndex(child.get("name"), type.text, type.get("name"))
+        enum_choicemap[longname] = choices
+    enum_longnames.sort()
+        
+def print_enumerated_types():
+    print("<a name=\"EnumeratedTypes\"></a>")
+    print("<h3>Enumerated Types</h3>")
+    print("<a href=\"javascript:toggle_node('%s')\"> %s </a>%sEnumerated 
Types<br/>" % ("EnumTypes", lozenge(), nbsp()))
+    print("<div width=\"100%%\" style=\"display:none\"  margin-bottom:\"2px\" 
id=\"EnumTypes\">")
+    print("<table>")
+    print("<tr>")
+    print(" <th>Section</th>")
+    print(" <th>Name</th>")
+    print(" <th>Type</th>")
+    print(" <th>Label</th>")
+    print(" <th>Provides</th>")
+    print("</tr>")
+    for lname in enum_longnames:
+        type = enum_typemap[lname]
+        print("<tr id=\"TYPE_%s\">" % type.get("name"))
+        print(" <td>%s</td>" % type.text)
+        print(" <td><a href=\"#details_%s\"><strong>%s</strong></a></td>" % 
(type.get("name"), type.get("name")))
+        print(" <td><a href=\"#TYPE_%s\">%s</a></td>" % (type.get("source"), 
type.get("source")))
+        print(" <td>%s</td>" % noNoneString(type.get("label")))
+        print(" <td>%s</td>" % noNoneProvideRef(type.get("provides")))
+        print("</tr>")
+        addToIndex(type.get("name"), type.text) # Enum
+        stats.nEnumeratedTypes += 1
+    print("</table>")
+    print("<br/>")
+
+    for lname in enum_longnames:
+        type = enum_typemap[lname]
+        enum_key = lname.split()
+        section = enum_key[0]
+        enum_typename = enum_key[1]
+        print("<a name=\"details_%s\"></a>" % (enum_typename))
+        print("%s%s<a href=\"javascript:toggle_node('%s')\"> %s </a>%s 
%s<strong><a href=\"#TYPE_%s\">%s</a></strong><br/>" % \
+              (nbsp(), nbsp(), "ET"+enum_typename, lozenge(), nbsp(), 
"Enumerated type: " + section + " - ", enum_typename, enum_typename))
+        print("<div width=\"100%%\" style=\"display:none\"  
margin-bottom:\"2px\" id=\"%s\">" % ("ET"+enum_typename))
+        print("<table>")
+        print("<tr>")
+        print(" <th>Name</th>")
+        print(" <th>Type/Value</th>")
+        print(" <th>Label</th>")
+        print(" <th>Provides</th>")
+        print("</tr>")
+        print("<tr>")
+        print(" <td><strong>%s</strong></td>" % (type.get("name")))
+        print(" <td><a href=\"#TYPE_%s\">%s</a></td>" % (type.get("source"), 
type.get("source")))
+        print(" <td>%s</td>" % noNoneString(type.get("label")))
+        print(" <td>%s</td>" % noNoneProvideRef(type.get("provides")))
+        print("</tr>")
+        for child in type.findall("choice"):
+            print("<tr>")
+            print(" <td><strong>%s</strong></td>" % child.get("name"))
+            print(" <td>%s</td>" % child.get("value"))
+            print("</tr>")
+        print("</table>")
+        print("<br/>")
+        print("</div>")
+    print("</div>")   # End enumerated type details
+    print("<br/>")
+
+#
+#
+def print_restricted_types():
+    print("<a name=\"RestrictedTypes\"></a>")
+    print("<h3>Restricted Types</h3>")
+    print("<a href=\"javascript:toggle_node('%s')\"> %s </a>%sRestricted 
Types<br/>" % ("RestrTypes", lozenge(), nbsp()))
+    print("<div width=\"100%%\" style=\"display:none\"  margin-bottom:\"2px\" 
id=\"RestrTypes\">")
+    print("<table>")
+    print("<tr>")
+    print(" <th>Section</th>")
+    print(" <th>Name</th>")
+    print(" <th>Type</th>")
+    print(" <th>Label</th>")
+    print(" <th>Provides</th>")
+    print("</tr>")
+    for type in typesRestricted:
+        print("<tr>")
+        print(" <td>%s</td>" % type.text)
+        print(" <td><strong><a name=\"TYPE_%s\">%s</a></strong></td>" % 
(type.get("name"), type.get("name")))
+        print(" <td><a href=\"#TYPE_%s\">%s</a></td>" % 
(type.get("source"),type.get("source")))
+        print(" <td>%s</td>" % noNoneString(type.get("label")))
+        print(" <td>%s</td>" % noNoneProvideRef(type.get("provides")))
+        print("</tr>")
+        addToIndex(type.get("name"), type.text) # Restricted
+        stats.nRestrictedTypes += 1
+    print("</table>")
+    print("</div>")
+    print("<br/>")
+
+
+#
+#
+def print_provided_types():
+    providedtypenames.sort()
+    print("<a name=\"ProvidedTypes\"></a>")
+    print("<h3>Provided Types</h3>")
+    print("<a href=\"javascript:toggle_node('%s')\"> %s </a>%sProvided 
Types<br/>" % ("ProvTypes", lozenge(), nbsp()))
+    print("<div width=\"100%%\" style=\"display:none\"  margin-bottom:\"2px\" 
id=\"ProvTypes\">")
+    print("<table>")
+    print("<tr>")
+    print(" <th>Provided Type</th>")
+    print(" <th>Provider</th>")
+    print(" <th>Provider Section</th>")
+    print("</tr>")
+    for ptype in providedtypenames:
+        anchor = " id=\"PROVIDEDTYPE_%s\"" % ptype
+        types = provided[ptype]
+        addToIndex(ptype, "PROVIDED")
+        stats.nProvidedTypes += 1
+        for type in types:
+            print("<tr%s>" % anchor)
+            anchor = ""
+            print(" <td>%s</td>" % ptype)
+            print(" <td>%s</td>" % noNoneTypeRef(type.get("name")))
+            print(" <td>%s</td>" % type.text)
+            print("</tr>")
+    print("</table>")
+    print("</div>")
+    print("<br/>")
+        
+#
+#
+def print_type_index():
+    typeNameIndex.sort()
+    print("<a name=\"Indices\"></a>")
+    print("<h2>Indices</h2>")
+    print("<a name=\"TypeIndex\"></a>")
+    print("<h3>Type Index</h3>")
+    print("<a href=\"javascript:toggle_node('%s')\"> %s </a>%sType Index<br/>" 
% ("TypIndex", lozenge(), nbsp()))
+    print("<div width=\"100%%\" style=\"display:none\"  margin-bottom:\"2px\" 
id=\"TypIndex\">")
+    print("<table>")
+    print("<tr>")
+    print(" <th>Type Name</th>")
+    print(" <th>Section</th>")
+    print("</tr>")
+    for idx in typeNameIndex:
+        sections = typeIndex[idx]
+        for section in sections:
+            print("<tr>")
+            if section == "PROVIDED":
+                name = noNoneProvideRef(idx)
+            else:
+                name = noNoneTypeRef(idx)
+            print(" <td>%s</td>" % name)
+            print(" <td>%s</td>" % section)
+            print("</tr>")
+            addToGrandIndex(idx, name, "type", section, " ")
+            stats.nIndexedTypes += 1
+    print("</table>")
+    print("</div>")
+    print("<br/>")
+        
+
+#
+#
+def print_field_index():
+    fieldNameIndex.sort()
+    print("<a name=\"FieldIndex\"></a>")
+    print("<h3>Field Index</h3>")
+    print("<a href=\"javascript:toggle_node('%s')\"> %s </a>%sField 
Index<br/>" % ("FldIndex", lozenge(), nbsp()))
+    print("<div width=\"100%%\" style=\"display:none\"  margin-bottom:\"2px\" 
id=\"FldIndex\">")
+    print("<table>")
+    print("<tr>")
+    print(" <th>Field Name</th>")
+    print(" <th>Parent Type</th>")
+    print(" <th>Section</th>")
+    print("</tr>")
+    for idx in fieldNameIndex:
+        parents = fieldIndex[idx]
+        for parent in parents:
+            psect = parent[0]
+            ptype = parent[1]
+            print("<tr>")
+            name = "<a href=\"#FIELD_%s_%s\">%s</a>" % (ptype, idx, idx)
+            print(" <td>%s</td>" % name)
+            print(" <td>%s</td>" % ptype)
+            print(" <td>%s</td>" % psect)
+            print("</tr>")
+            addToGrandIndex(idx, name, "field", psect, ptype)
+            stats.nIndexedFields += 1
+    print("</table>")
+    print("</div>")
+    print("<br/>")
+
+
+#
+#
+def print_enumeration_index():
+    enumNameIndex.sort()
+    print("<a name=\"EnumerationIndex\"></a>")
+    print("<h3>Enumeration Index</h3>")
+    print("<a href=\"javascript:toggle_node('%s')\"> %s </a>%sEnumeration 
Index<br/>" % ("EnuIndex", lozenge(), nbsp()))
+    print("<div width=\"100%%\" style=\"display:none\"  margin-bottom:\"2px\" 
id=\"EnuIndex\">")
+    print("<table>")
+    print("<tr>")
+    print(" <th>Enum Value</th>")
+    print(" <th>Enumeration</th>")
+    print(" <th>Section</th>")
+    print("</tr>")
+    for idx in enumNameIndex:
+        parents = enumIndex[idx]
+        for parent in parents:
+            psect = parent[0]
+            ptype = parent[1]
+            enum = "<a href=\"#TYPE_%s\">%s</a>" % (ptype, ptype)
+            print("<tr>")
+            print(" <td>%s</td>" % idx)
+            print(" <td>%s</td>" % enum)
+            print(" <td>%s</td>" % psect)
+            print("</tr>")
+            addToGrandIndex(idx, idx, "enum value", psect, enum)
+            stats.nIndexedEnumerations += 1
+    print("</table>")
+    print("</div>")
+    print("<br/>")
+
+
+#
+#
+def print_grand_index():
+    grandNameIndex.sort()
+    print("<a name=\"GrandIndex\"></a>")
+    print("<h3>Grand Index</h3>")
+    print("<a href=\"javascript:toggle_node('%s')\"> %s </a>%sGrand 
Index<br/>" % ("GndIndex", lozenge(), nbsp()))
+    print("<div width=\"100%%\" style=\"display:none\"  margin-bottom:\"2px\" 
id=\"GndIndex\">")
+    print("<table>")
+    print("<tr>")
+    print(" <th>Name</th>")
+    print(" <th>Category</th>")
+    print(" <th>Parent</th>")
+    print(" <th>Section</th>")
+    print("</tr>")
+    for idx in grandNameIndex:
+        parents = grandIndex[idx]
+        for parent in parents:
+            print("<tr>")
+            print(" <td>%s</td>" % parent[0])
+            print(" <td>%s</td>" % parent[1])
+            print(" <td>%s</td>" % parent[2])
+            print(" <td>%s</td>" % parent[3])
+            print("</tr>")
+            stats.nIndexedGrand += 1
+    print("</table>")
+    print("</div>")
+    print("<br/>")
+
+
+#
+#
+def print_xref_index():
+    #     Create xref name index from type index.
+    xrefNameIndex.append("*")
+    for idx in typeNameIndex:
+        sections = typeIndex[idx]
+        for section in sections:
+            name = idx
+            if section == "PROVIDED":
+                name += ",PROVIDED"
+            if name not in xrefNameIndex:
+                xrefNameIndex.append(name)
+            else:
+                # primitive type names get reused as encoding names...
+                pass
+        
+    xrefNameIndex.sort()
+    for name in xrefNameIndex:
+        xrefIndex[name] = [] # list of types defined in terms of type 'name'
+
+    # Enum types
+    for lname in enum_longnames:
+        type = enum_typemap[lname]
+        decname = noNoneTypeRef(type.get("name"))
+        source = type.get("source")
+        category = "enum"
+        refSection = type.text
+        xrefIndex[source].append( [decname, category, refSection])
+
+    # Restricted types
+    for type in typesRestricted:
+        decname = noNoneTypeRef(type.get("name"))
+        source = type.get("source")
+        category = "restricted"
+        refSection = type.text
+        xrefIndex[source].append( [decname, category, refSection])
+
+    # Described types
+    for code in descr_codes:
+        name = descr_mapcode[code]
+        descr_key = name.split()
+        section = descr_key[0]
+        descr_typename = descr_key[1]
+        type = descr_typemap[name]
+        decname = noNoneTypeRef(descr_typename)
+        source = type.get("source")
+        category = "described"
+        refSection = section
+        xrefIndex[source].append( [decname, category, refSection])
+
+    # Described fields
+    for code in descr_codes:
+        name = descr_mapcode[code]
+        descr_key = name.split()
+        section = descr_key[0]
+        descr_typename = descr_key[1]
+        type = descr_typemap[name]
+        for child in type:
+            if child.tag == "field":
+                decname = "<a href=\"#FIELD_%s_%s\">%s</a>" % (descr_typename, 
child.get("name"), child.get("name"))
+                source = child.get("type")
+                category = "field"
+                refSection = "%s - %s" % (section, descr_typename)
+                xrefIndex[source].append( [decname, category, refSection])
+
+    # Provided types
+    for ptype in providedtypenames:
+        types = provided[ptype]
+        for type in types:
+            decname = noNoneTypeRef(type.get("name"))
+            source = "%s,%s" % (ptype, "PROVIDED")
+            category = "provided"
+            refSection = ""
+            xrefIndex[source].append( [decname, category, refSection])
+    print("<a name=\"XrefIndex3\"></a>")
+    print("<h3>Cross Reference Index</h3>")
+    print("<a href=\"javascript:toggle_node('%s')\"> %s </a>%sType Cross 
Reference<br/>" % ("XrefIndex", lozenge(), nbsp()))
+    print("<div width=\"100%%\" style=\"display:none\"  margin-bottom:\"2px\" 
id=\"XrefIndex\">")
+    print("<table>")
+    print("<tr>")
+    print(" <th>Referenced Type</th>")
+    print(" <th>Referrer</th>")
+    print(" <th>Section</th>")
+    print(" <th>Type</th>")
+    print("</tr>")
+    for idx in xrefNameIndex:
+        if ":" not in idx:
+            try:
+                idxlist = idx.split(',')
+                typetext = ""
+                typename = ""
+                if len(idxlist) == 1:
+                    if idx == "*":
+                        typetext = "spec:wildcard"
+                        typename = "*"
+                    else:
+                        type = typesAll[idx]
+                        typetext = type.text
+                        typename = idxlist[0]
+                else:
+                    typetext = "provided"
+                    typename = "<a href=\"#PROVIDEDTYPE_%s\"> %s </a>" % 
(idxlist[0], idxlist[0])
+                refs = xrefIndex[idx]
+                if len(refs) == 0:
+                    print("<tr>")
+                    print(" <td>%s:<strong>%s</strong></td>" % (typetext, 
typename))
+                    print(" <td>%s</td>" % nbsp())
+                    print(" <td>%s</td>" % nbsp())
+                    print(" <td>%s</td>" % nbsp())
+                    print("</tr>")
+                for ref in refs:
+                    print("<tr>")
+                    print(" <td>%s:<strong>%s</strong></td>" % (typetext, 
typename))
+                    print(" <td>%s</td>" % ref[0])
+                    print(" <td>%s</td>" % ref[2])
+                    print(" <td>%s</td>" % ref[1])
+                    print("</tr>")
+                    stats.nIndexedXrefs += 1
+            except:
+                #log("Can't resolve as type: %s" % idx) # constants can't be 
resolved
+                pass
+    print("</table>")
+    print("</div>")
+    print("<br/>")
+
+
+#
+#
+def print_end_body():
+    pass
+
+#
+#
+def main_except(argv):
+    # Compute tables and stuff that may be needed by show/hide functions
+    compute_primitive_types()
+    compute_described_types()
+    compute_enumerated_types()
+    
+    # Print the web page
+    print_start_body()
+
+    print("<h1>AMQP 1.0 interactive type reference</h1>")
+
+    print_toc()
+    print_constants()
+    print_primitive_types()
+    print_enumerated_types()
+    print_restricted_types()
+    print_described_types()
+    print_provided_types()
+    print_type_index()
+    print_field_index()
+    print_enumeration_index()
+    print_grand_index()
+    print_xref_index()
+    
+    print_end_body()
+
+    stats.statCheck("nConstants", 13)
+    stats.statCheck("nPrimitiveEncodings", 39)
+    stats.statCheck("nEnumeratedTypes", 13)
+    stats.statCheck("nRestrictedTypes", 19)
+    stats.statCheck("nDescribedTypes", 40)
+    stats.statCheck("nProvidedTypes", 14)
+    stats.statCheck("nIndexedTypes", 162)
+    stats.statCheck("nIndexedFields", 125)
+    stats.statCheck("nIndexedEnumerations", 54)
+    stats.statCheck("nIndexedGrand", 341)
+    stats.statCheck("nIndexedXrefs", 252)
+
+#
+#
+def main(argv):
+    try:
+        main_except(argv)
+        return 0
+    except ExitStatus, e:
+        return e.status
+    except Exception, e:
+        print("%s: %s"%(type(e).__name__, e))
+        return 1
+
+if __name__ == "__main__":
+    sys.exit(main(sys.argv))

Propchange: qpid/site/scripts/gen-amqp-type-reference
------------------------------------------------------------------------------
    svn:executable = *




---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to