From 40d1539f04b945045352db7329ae83562c32ddf0 Mon Sep 17 00:00:00 2001
From: Ben Reynwar <ben@reynwar.net>
Date: Tue, 8 May 2012 13:07:02 -0700
Subject: docs: Modified swig_doc.py to put parameter info in docstrings.

---
 docs/doxygen/swig_doc.py | 138 +++++++++++++++++++++++------------------------
 1 file changed, 69 insertions(+), 69 deletions(-)

(limited to 'docs/doxygen/swig_doc.py')

diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
index bd35b8efdd..414748bbae 100644
--- a/docs/doxygen/swig_doc.py
+++ b/docs/doxygen/swig_doc.py
@@ -1,23 +1,23 @@
 #
 # Copyright 2010,2011 Free Software Foundation, Inc.
-#
+# 
 # This file is part of GNU Radio
-#
+# 
 # GNU Radio is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 3, or (at your option)
 # any later version.
-#
+# 
 # GNU Radio is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
-#
+# 
 # You should have received a copy of the GNU General Public License
 # along with GNU Radio; see the file COPYING.  If not, write to
 # the Free Software Foundation, Inc., 51 Franklin Street,
 # Boston, MA 02110-1301, USA.
-#
+# 
 """
 Creates the swig_doc.i SWIG interface file.
 Execute using: python swig_doc.py xml_path outputfilename
@@ -29,11 +29,7 @@ python docstrings.
 
 import sys, time
 
-try:
-    from doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile, base
-except ImportError:
-    from gnuradio.doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile, base
-
+from doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile, base
 
 def py_name(name):
     bits = name.split('_')
@@ -56,7 +52,9 @@ class Block(object):
         # Check for a parsing error.
         if item.error():
             return False
-        return item.has_member(make_name(item.name()), DoxyFriend)
+        friendname = make_name(item.name())
+        is_a_block = item.has_member(friendname, DoxyFriend)
+        return is_a_block
 
 
 def utoascii(text):
@@ -82,13 +80,19 @@ def combine_descriptions(obj):
     if dd:
         description.append(dd)
     return utoascii('\n\n'.join(description)).strip()
-
+    
+def format_params(parameteritems):
+    output = ['Args:']
+    template = '    {0} : {1}'
+    for pi in parameteritems:
+        output.append(template.format(pi.name, pi.description))
+    return '\n'.join(output)
 
 entry_templ = '%feature("docstring") {name} "{docstring}"'
-def make_entry(obj, name=None, templ="{description}", description=None):
+def make_entry(obj, name=None, templ="{description}", description=None, params=[]):
     """
     Create a docstring entry for a swig interface file.
-
+    
     obj - a doxyxml object from which documentation will be extracted.
     name - the name of the C object (defaults to obj.name())
     templ - an optional template for the docstring containing only one
@@ -102,6 +106,9 @@ def make_entry(obj, name=None, templ="{description}", description=None):
         return ''
     if description is None:
         description = combine_descriptions(obj)
+    if params:
+        description += '\n\n'
+        description += utoascii(format_params(params))
     docstring = templ.format(description=description)
     if not docstring:
         return ''
@@ -121,16 +128,17 @@ def make_func_entry(func, name=None, description=None, params=None):
             used as the description instead of extracting it from func.
     params - a parameter list that overrides using func.params.
     """
-    if params is None:
-        params = func.params
-    params = [prm.declname for prm in params]
-    if params:
-        sig = "Params: (%s)" % ", ".join(params)
-    else:
-        sig = "Params: (NONE)"
-    templ = "{description}\n\n" + sig
-    return make_entry(func, name=name, templ=utoascii(templ),
-                      description=description)
+    #if params is None:
+    #    params = func.params
+    #params = [prm.declname for prm in params]
+    #if params:
+    #    sig = "Params: (%s)" % ", ".join(params)
+    #else:
+    #    sig = "Params: (NONE)"
+    #templ = "{description}\n\n" + sig
+    #return make_entry(func, name=name, templ=utoascii(templ),
+    #                  description=description)
+    return make_entry(func, name=name, description=description, params=params)
 
 
 def make_class_entry(klass, description=None):
@@ -138,7 +146,7 @@ def make_class_entry(klass, description=None):
     Create a class docstring for a swig interface file.
     """
     output = []
-    output.append(make_entry(klass, description=description))
+    output.append(make_entry(klass, description=description, params=klass.params))
     for func in klass.in_category(DoxyFunction):
         name = klass.name() + '::' + func.name()
         output.append(make_func_entry(func, name=name))
@@ -177,16 +185,33 @@ def make_block_entry(di, block):
     output.append(make_class_entry(block, description=super_description))
     creator = block.get_member(block.name(), DoxyFunction)
     output.append(make_func_entry(make_func, description=super_description,
-                                  params=creator.params))
+                                  params=block.params))
     return "\n\n".join(output)
 
+def wait_if_necessary(tries, swigdocfilename, item=None):
+    if item is not None:
+        extra = ', item {0}'.format(item.name())
+    else:
+        extra = ''
+    if(tries < 3):
+        # May not be built just yet; sleep and try again
+        sys.stderr.write("XML parsing problem with file {0}{1}, retrying.\n".format(
+                swigdocfilename, extra))
+        time.sleep(1)
+        tries += 1
+        return tries, True
+    else:
+        # if we've given it three tries, give up and raise an error
+        sys.stderr.write("XML parsing error with file {0}{1}. giving up.\n".format(
+                swigdocfilename, extra))
+        return tries, False
 
-def make_swig_interface_file(di, swigdocfilename, custom_output=None):
-
+def make_swig_interface_file(di, swigdocfilename, custom_output=None, tries=0):
+    
     output = ["""
 /*
  * This file was automatically generated using swig_doc.py.
- *
+ * 
  * Any changes to it will be lost next time it is regenerated.
  */
 """]
@@ -195,46 +220,29 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
         output.append(custom_output)
 
     # Create docstrings for the blocks.
-    tries = 0
     while(1):
         try:
             blocks = di.in_category(Block)
         except:
-            if(tries < 3):
-                # May not be built just yet; sleep and try again
-                sys.stderr.write("XML parsing problem with file {0}, retrying.\n".format(
-                        swigdocfilename))
-                time.sleep(1)
-                tries += 1
-            else:
-                # if we've given it three tries, give up and raise an error
-                sys.stderr.write("XML parsing error with file {0}. giving up.\n".format(
-                        swigdocfilename))
+            tries, try_again = wait_if_necessary(tries, swigdocfilename)
+            if not try_again:
                 raise
         else:
             break
-
     make_funcs = set([])
     for block in blocks:
-        tries = 0
         while(1):
             try:
                 make_func = di.get_member(make_name(block.name()), DoxyFunction)
-                make_funcs.add(make_func.name())
-                output.append(make_block_entry(di, block))
+                # Don't want to risk writing to output twice.
+                if make_func.name() not in make_funcs:
+                    make_funcs.add(make_func.name())
+                    output.append(make_block_entry(di, block))
             except block.ParsingError:
-                sys.stderr.write('Parsing error for block {0}'.format(block.name()))
+                sys.stderr.write('Parsing error for block {0}\n'.format(block.name()))
             except:
-                if(tries < 3):
-                    # May not be built just yet; sleep and try again
-                    sys.stderr.write("XML parsing problem with file {0}, retrying.\n".format(
-                            swigdocfilename))
-                    time.sleep(1)
-                    tries += 1
-                else:
-                    # if we've given it three tries, give up and raise an error
-                    sys.stderr.write("XML parsing error with file {0}. giving up.\n".format(
-                            swigdocfilename))
+                tries, try_again = wait_if_necessary(tries, swigdocfilename, block)
+                if not try_again:
                     raise
             else:
                 break
@@ -246,7 +254,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
         try:
             output.append(make_func_entry(f))
         except f.ParsingError:
-            sys.stderr.write('Parsing error for function {0}'.format(f.name()))
+            sys.stderr.write('Parsing error for function {0}\n'.format(f.name()))
 
     # Create docstrings for classes
     block_names = [block.name() for block in blocks]
@@ -255,7 +263,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None):
         try:
             output.append(make_class_entry(k))
         except k.ParsingError:
-            sys.stderr.write('Parsing error for class {0}'.format(k.name()))
+            sys.stderr.write('Parsing error for class {0}\n'.format(k.name()))
 
     # Docstrings are not created for anything that is not a function or a class.
     # If this excludes anything important please add it here.
@@ -291,19 +299,11 @@ if __name__ == "__main__":
     tries = 0
     while(1):
         try:
-            make_swig_interface_file(di, swigdocfilename, custom_output=custom_output)
+            make_swig_interface_file(di, swigdocfilename, custom_output=custom_output, tries=tries)
         except:
-            if(tries < 3):
-                # May not be built just yet; sleep and try again
-                sys.stderr.write("XML parsing problem with file {0}, retrying.\n".format(
-                        swigdocfilename))
-                time.sleep(1)
-                tries += 1
-            else:
-                # if we've given it three tries, give up and raise an error
-                sys.stderr.write("XML parsing error with file {0}. giving up.\n".format(
-                        swigdocfilename))
+            tries, try_again = wait_if_necessary(tries, swigdocfilename)
+            if not try_again:
                 raise
         else:
             break
-
+        
-- 
cgit v1.2.3


From bc1b4c18c8f16b6fbc666593869547ad2529662f Mon Sep 17 00:00:00 2001
From: Ben Reynwar <ben@reynwar.net>
Date: Mon, 21 May 2012 22:15:08 -0700
Subject: docs: Fixing swig_doc and sphinx so that it can deal with 3.7 style.

---
 docs/doxygen/doxyxml/doxyindex.py          |  56 ++++++++------
 docs/doxygen/swig_doc.py                   |  81 ++++++++++++++++++--
 docs/sphinx/README                         |  13 ++--
 docs/sphinx/gnuradio_sphinx.py             |  38 +++++++++-
 docs/sphinx/source/atsc/blks.rst           |  34 ++++-----
 docs/sphinx/source/audio/index.rst         |   4 +-
 docs/sphinx/source/digital/blocks.rst      |  32 ++++----
 docs/sphinx/source/gr/coding_blk.rst       |  16 ++--
 docs/sphinx/source/gr/converter_blk.rst    |  58 +++++++-------
 docs/sphinx/source/gr/demodulation_blk.rst |   2 +-
 docs/sphinx/source/gr/dft_blk.rst          |   6 +-
 docs/sphinx/source/gr/filter_blk.rst       |  86 ++++++++++-----------
 docs/sphinx/source/gr/level_blk.rst        |  46 +++++------
 docs/sphinx/source/gr/math_blk.rst         | 112 +++++++++++++--------------
 docs/sphinx/source/gr/misc_blk.rst         |  18 ++---
 docs/sphinx/source/gr/modulation_blk.rst   |   6 +-
 docs/sphinx/source/gr/sink_blk.rst         |  44 +++++------
 docs/sphinx/source/gr/slicedice_blk.rst    |  22 +++---
 docs/sphinx/source/gr/source_blk.rst       |  44 +++++------
 docs/sphinx/source/gr/sync_blk.rst         |  12 +--
 docs/sphinx/source/noaa.rst                |   6 +-
 docs/sphinx/source/pager/blks.rst          |  10 +--
 docs/sphinx/source/qtgui/index.rst         |   8 +-
 docs/sphinx/source/trellis/blks.rst        | 118 ++++++++++++++---------------
 docs/sphinx/source/video_sdl.rst           |   4 +-
 docs/sphinx/source/vocoder/blks.rst        |  32 ++++----
 docs/sphinx/source/wavelet.rst             |   6 +-
 27 files changed, 513 insertions(+), 401 deletions(-)

(limited to 'docs/doxygen/swig_doc.py')

diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py
index 84bc7b88c3..304109a8e5 100644
--- a/docs/doxygen/doxyxml/doxyindex.py
+++ b/docs/doxygen/doxyxml/doxyindex.py
@@ -80,12 +80,28 @@ class DoxyCompMem(Base):
         self._data['brief_description'] = bd
         self._data['detailed_description'] = dd        
 
+    def set_parameters(self, data):
+        vs = [ddc.value for ddc in data.detaileddescription.content_]
+        pls = []
+        for v in vs:
+            if hasattr(v, 'parameterlist'):
+                pls += v.parameterlist
+        pis = []
+        for pl in pls:
+            pis += pl.parameteritem
+        dpis = []
+        for pi in pis:
+            dpi = DoxyParameterItem(pi)
+            dpi._parse()
+            dpis.append(dpi)
+        self._data['params'] = dpis
+
+
 class DoxyCompound(DoxyCompMem):
     pass
 
 class DoxyMember(DoxyCompMem):
     pass
-    
 
 class DoxyFunction(DoxyMember):
 
@@ -98,10 +114,13 @@ class DoxyFunction(DoxyMember):
             return
         super(DoxyFunction, self)._parse()
         self.set_descriptions(self._parse_data)
-        self._data['params'] = []
-        prms = self._parse_data.param
-        for prm in prms:
-            self._data['params'].append(DoxyParam(prm))
+        self.set_parameters(self._parse_data)
+        if not self._data['params']:
+            # If the params weren't set by a comment then just grab the names.
+            self._data['params'] = []
+            prms = self._parse_data.param
+            for prm in prms:
+                self._data['params'].append(DoxyParam(prm))
 
     brief_description = property(lambda self: self.data()['brief_description'])
     detailed_description = property(lambda self: self.data()['detailed_description'])
@@ -121,9 +140,18 @@ class DoxyParam(DoxyMember):
         self.set_descriptions(self._parse_data)
         self._data['declname'] = self._parse_data.declname
 
+    @property
+    def description(self):
+        descriptions = []
+        if self.brief_description:
+            descriptions.append(self.brief_description)
+        if self.detailed_description:
+            descriptions.append(self.detailed_description)
+        return '\n\n'.join(descriptions)
+
     brief_description = property(lambda self: self.data()['brief_description'])
     detailed_description = property(lambda self: self.data()['detailed_description'])
-    declname = property(lambda self: self.data()['declname'])
+    name = property(lambda self: self.data()['declname'])
 
 class DoxyParameterItem(DoxyMember):
     """A different representation of a parameter in Doxygen."""
@@ -165,22 +193,6 @@ class DoxyClass(DoxyCompound):
         # We just ignore this for now.
         self.process_memberdefs()
 
-    def set_parameters(self, data):
-        vs = [ddc.value for ddc in data.detaileddescription.content_]
-        pls = []
-        for v in vs:
-            if hasattr(v, 'parameterlist'):
-                pls += v.parameterlist
-        pis = []
-        for pl in pls:
-            pis += pl.parameteritem
-        dpis = []
-        for pi in pis:
-            dpi = DoxyParameterItem(pi)
-            dpi._parse()
-            dpis.append(dpi)
-        self._data['params'] = dpis
-        
     brief_description = property(lambda self: self.data()['brief_description'])
     detailed_description = property(lambda self: self.data()['detailed_description'])
     params = property(lambda self: self.data()['params'])
diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
index 414748bbae..9277470984 100644
--- a/docs/doxygen/swig_doc.py
+++ b/docs/doxygen/swig_doc.py
@@ -29,7 +29,8 @@ python docstrings.
 
 import sys, time
 
-from doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile, base
+from doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile
+from doxyxml import DoxyOther, base
 
 def py_name(name):
     bits = name.split('_')
@@ -54,8 +55,27 @@ class Block(object):
             return False
         friendname = make_name(item.name())
         is_a_block = item.has_member(friendname, DoxyFriend)
+        # But now sometimes the make function isn't a friend so check again.
+        if not is_a_block:
+            is_a_block = di.has_member(friendname, DoxyFunction)
         return is_a_block
 
+class Block2(object):
+    """
+    Checks if doxyxml produced objects correspond to a new style
+    gnuradio block.
+    """
+    
+    @classmethod
+    def includes(cls, item):
+        if not isinstance(item, DoxyClass):
+            return False
+        # Check for a parsing error.
+        if item.error():
+            return False
+        is_a_block2 = item.has_member('make', DoxyFunction) and item.has_member('sptr', DoxyOther)
+        return is_a_block2
+        
 
 def utoascii(text):
     """
@@ -141,15 +161,18 @@ def make_func_entry(func, name=None, description=None, params=None):
     return make_entry(func, name=name, description=description, params=params)
 
 
-def make_class_entry(klass, description=None):
+def make_class_entry(klass, description=None, ignored_methods=[], params=None):
     """
     Create a class docstring for a swig interface file.
     """
+    if params is None:
+        params = klass.params
     output = []
-    output.append(make_entry(klass, description=description, params=klass.params))
+    output.append(make_entry(klass, description=description, params=params))
     for func in klass.in_category(DoxyFunction):
-        name = klass.name() + '::' + func.name()
-        output.append(make_func_entry(func, name=name))
+        if func.name() not in ignored_methods:
+            name = klass.name() + '::' + func.name()
+            output.append(make_func_entry(func, name=name))
     return "\n\n".join(output)
 
 
@@ -183,11 +206,32 @@ def make_block_entry(di, block):
     # the make function.
     output = []
     output.append(make_class_entry(block, description=super_description))
-    creator = block.get_member(block.name(), DoxyFunction)
     output.append(make_func_entry(make_func, description=super_description,
                                   params=block.params))
     return "\n\n".join(output)
 
+def make_block2_entry(di, block):
+    """
+    Create class and function docstrings of a new style gnuradio block for a
+    swig interface file.
+    """
+    descriptions = []
+    # For new style blocks all the relevant documentation should be
+    # associated with the 'make' method.
+    make_func = block.get_member('make', DoxyFunction)
+    description = combine_descriptions(make_func)
+    # Associate the combined description with the class and
+    # the make function.
+    output = []
+    #output.append(make_class_entry(
+    #        block, description=description,
+    #        ignored_methods=['make'], params=make_func.params))
+    makename = block.name() + '::make'
+    output.append(make_func_entry(
+            make_func, name=makename, description=description,
+            params=make_func.params))
+    return "\n\n".join(output)
+
 def wait_if_necessary(tries, swigdocfilename, item=None):
     if item is not None:
         extra = ', item {0}'.format(item.name())
@@ -223,6 +267,7 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None, tries=0):
     while(1):
         try:
             blocks = di.in_category(Block)
+            blocks2 = di.in_category(Block2)
         except:
             tries, try_again = wait_if_necessary(tries, swigdocfilename)
             if not try_again:
@@ -246,10 +291,28 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None, tries=0):
                     raise
             else:
                 break
+    for block in blocks2:
+        while(1):
+            try:
+                make_func = block.get_member('make', DoxyFunction)
+                make_func_name = block.name() +'::make'
+                # Don't want to risk writing to output twice.
+                if make_func_name not in make_funcs:
+                    make_funcs.add(make_func_name)
+                    output.append(make_block2_entry(di, block))
+            except block.ParsingError:
+                sys.stderr.write('Parsing error for block {0}\n'.format(block.name()))
+            except:
+                tries, try_again = wait_if_necessary(tries, swigdocfilename, block)
+                if not try_again:
+                    raise
+            else:
+                break        
 
     # Create docstrings for functions
     # Don't include the make functions since they have already been dealt with.
-    funcs = [f for f in di.in_category(DoxyFunction) if f.name() not in make_funcs]
+    funcs = [f for f in di.in_category(DoxyFunction) 
+             if f.name() not in make_funcs and not f.name().startswith('std::')]
     for f in funcs:
         try:
             output.append(make_func_entry(f))
@@ -258,7 +321,9 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None, tries=0):
 
     # Create docstrings for classes
     block_names = [block.name() for block in blocks]
-    klasses = [k for k in di.in_category(DoxyClass) if k.name() not in block_names]
+    block_names += [block.name() for block in blocks2]
+    klasses = [k for k in di.in_category(DoxyClass)
+               if k.name() not in block_names and not k.name().startswith('std::')]
     for k in klasses:
         try:
             output.append(make_class_entry(k))
diff --git a/docs/sphinx/README b/docs/sphinx/README
index c3ac382648..0ae3a43f84 100644
--- a/docs/sphinx/README
+++ b/docs/sphinx/README
@@ -48,7 +48,7 @@ examples.
    under the "Slicing and Dicing Streams" subheading.
    Edit file gnuradio/docs/sphinx/source/gr/slicedice_blk.rst and add
    the line
-   >.. autoblock:: gnuradio.gr.myslicer
+   >.. autooldblock:: gnuradio.gr.myslicer
 
 2) Adding a new python hierarchical block gnuradio.digital.mymod
    Edit file gnruadio/docs/sphinx/source/digital/index.rst and add the
@@ -63,7 +63,10 @@ examples.
    a python hierarchical signal processing block so that it can format
    it appropriately.
 
-The process for documenting objects that are not signal processing blocks is
-similar but rather than using the 'autoblock' and 'autopyblock' directives
-the standard sphinx directives such as 'autofunction' and 'autoclass' can
-be used.
\ No newline at end of file
+The process for documenting objects that are not signal processing
+blocks is similar but rather than using the 'autooldblock', and
+'autopyblock' directives the standard sphinx directives such as
+'autofunction' and 'autoclass' can be used.
+
+Finally for signal processing blocks using the 3.7 style the directive
+'autoblock' rather than 'autooldblock' can be used.
\ No newline at end of file
diff --git a/docs/sphinx/gnuradio_sphinx.py b/docs/sphinx/gnuradio_sphinx.py
index 6f35a6fce9..e8ca867f8c 100644
--- a/docs/sphinx/gnuradio_sphinx.py
+++ b/docs/sphinx/gnuradio_sphinx.py
@@ -15,6 +15,7 @@ def setup(sp):
     sp.connect('autodoc-process-signature', fix_signature)
     sp.connect('autodoc-process-docstring', remove_lines)
     # Add node to autodocument signal-processing blocks.
+    sp.add_autodocumenter(OldBlockDocumenter)
     sp.add_autodocumenter(BlockDocumenter)
     sp.add_autodocumenter(PyBlockDocumenter)
 
@@ -105,9 +106,10 @@ common_block_members =[
     'thisown',
     'to_basic_block',
     'unique_id',
+    'make',
     ]
 
-class BlockDocumenter(FunctionDocumenter):
+class OldBlockDocumenter(FunctionDocumenter):
     """
     Specialized Documenter subclass for gnuradio blocks.
 
@@ -115,13 +117,13 @@ class BlockDocumenter(FunctionDocumenter):
     with the wrapped sptr (e.g. gr.gr_head_sptr) to keep the documentation
     tidier.
     """
-    objtype = 'block'
+    objtype = 'oldblock'
     directivetype = 'function'
     # Don't want to use this for generic functions for give low priority.
     priority = -10 
     
     def __init__(self, *args, **kwargs):
-        super(BlockDocumenter, self).__init__(*args, **kwargs)
+        super(OldBlockDocumenter, self).__init__(*args, **kwargs)
         # Get class name
         bits = self.name.split('.')
         if len(bits) != 3 or bits[0] != 'gnuradio':
@@ -129,6 +131,36 @@ class BlockDocumenter(FunctionDocumenter):
         sptr_name = 'gnuradio.{0}.{0}_{1}_sptr'.format(bits[1], bits[2])
         # Create a Class Documenter to create documentation for the classes members.
         self.classdoccer = ClassDocumenter(self.directive, sptr_name, indent=self.content_indent)
+        self.classdoccer.doc_as_attr = False
+        self.classdoccer.real_modname = self.classdoccer.get_real_modname()
+        self.classdoccer.options.members = ALL
+        self.classdoccer.options.exclude_members = common_block_members
+        self.classdoccer.parse_name()
+        self.classdoccer.import_object()
+
+    def document_members(self, *args, **kwargs):
+        return self.classdoccer.document_members(*args, **kwargs)
+
+class BlockDocumenter(FunctionDocumenter):
+    """
+    Specialized Documenter subclass for new style gnuradio blocks.
+
+    It merges together the documentation for the generator function (e.g. wavelet.squash_ff)
+    with the wrapped sptr (e.g. wavelet.squash_ff_sptr) to keep the documentation
+    tidier.
+    """
+    objtype = 'block'
+    directivetype = 'function'
+    # Don't want to use this for generic functions for give low priority.
+    priority = -10 
+    
+    def __init__(self, *args, **kwargs):
+        super(BlockDocumenter, self).__init__(*args, **kwargs)
+        # Get class name
+        sptr_name = self.name + '_sptr'
+        # Create a Class Documenter to create documentation for the classes members.
+        self.classdoccer = ClassDocumenter(self.directive, sptr_name, indent=self.content_indent)
+        self.classdoccer.doc_as_attr = False
         self.classdoccer.real_modname = self.classdoccer.get_real_modname()
         self.classdoccer.options.members = ALL
         self.classdoccer.options.exclude_members = common_block_members
diff --git a/docs/sphinx/source/atsc/blks.rst b/docs/sphinx/source/atsc/blks.rst
index ce26f095b1..6f51a22876 100644
--- a/docs/sphinx/source/atsc/blks.rst
+++ b/docs/sphinx/source/atsc/blks.rst
@@ -1,20 +1,20 @@
 gnuradio.atsc: Signal Processing Blocks
 =======================================
 
-.. autoblock:: gnuradio.atsc.bit_timing_loop
-.. autoblock:: gnuradio.atsc.deinterleaver
-.. autoblock:: gnuradio.atsc.depad
-.. autoblock:: gnuradio.atsc.derandomizer
-.. autoblock:: gnuradio.atsc.ds_to_softds
-.. autoblock:: gnuradio.atsc.equalizer
-.. autoblock:: gnuradio.atsc.field_sync_demux
-.. autoblock:: gnuradio.atsc.field_sync_mux
-.. autoblock:: gnuradio.atsc.fpll
-.. autoblock:: gnuradio.atsc.fs_checker
-.. autoblock:: gnuradio.atsc.interleaver
-.. autoblock:: gnuradio.atsc.pad
-.. autoblock:: gnuradio.atsc.randomizer
-.. autoblock:: gnuradio.atsc.rs_decoder
-.. autoblock:: gnuradio.atsc.rs_encoder
-.. autoblock:: gnuradio.atsc.trellis_encoder
-.. autoblock:: gnuradio.atsc.viterbi_decoder
+.. autooldblock:: gnuradio.atsc.bit_timing_loop
+.. autooldblock:: gnuradio.atsc.deinterleaver
+.. autooldblock:: gnuradio.atsc.depad
+.. autooldblock:: gnuradio.atsc.derandomizer
+.. autooldblock:: gnuradio.atsc.ds_to_softds
+.. autooldblock:: gnuradio.atsc.equalizer
+.. autooldblock:: gnuradio.atsc.field_sync_demux
+.. autooldblock:: gnuradio.atsc.field_sync_mux
+.. autooldblock:: gnuradio.atsc.fpll
+.. autooldblock:: gnuradio.atsc.fs_checker
+.. autooldblock:: gnuradio.atsc.interleaver
+.. autooldblock:: gnuradio.atsc.pad
+.. autooldblock:: gnuradio.atsc.randomizer
+.. autooldblock:: gnuradio.atsc.rs_decoder
+.. autooldblock:: gnuradio.atsc.rs_encoder
+.. autooldblock:: gnuradio.atsc.trellis_encoder
+.. autooldblock:: gnuradio.atsc.viterbi_decoder
diff --git a/docs/sphinx/source/audio/index.rst b/docs/sphinx/source/audio/index.rst
index 31d53567b8..d0bc4f3c08 100644
--- a/docs/sphinx/source/audio/index.rst
+++ b/docs/sphinx/source/audio/index.rst
@@ -3,5 +3,5 @@ gnuradio.audio
 
 .. automodule:: gnuradio.audio
 
-.. autoblock:: gnuradio.audio.source
-.. autoblock:: gnuradio.audio.sink
+.. autooldblock:: gnuradio.audio.source
+.. autooldblock:: gnuradio.audio.sink
diff --git a/docs/sphinx/source/digital/blocks.rst b/docs/sphinx/source/digital/blocks.rst
index 2ac228d4ea..68ec8dad1c 100644
--- a/docs/sphinx/source/digital/blocks.rst
+++ b/docs/sphinx/source/digital/blocks.rst
@@ -1,22 +1,22 @@
 gnuradio.digital: Signal Processing Blocks
 ==========================================
 
-.. autoblock:: gnuradio.digital.fll_band_edge_cc
-.. autoblock:: gnuradio.digital.kurtotic_equalizer_cc
-.. autoblock:: gnuradio.digital.lms_dd_equalizer_cc
-.. autoblock:: gnuradio.digital.mpsk_receiver_cc
-.. autoblock:: gnuradio.digital.mpsk_snr_est_cc
-.. autoblock:: gnuradio.digital.clock_recovery_mm_cc
-.. autoblock:: gnuradio.digital.clock_recovery_mm_ff
-.. autoblock:: gnuradio.digital.constellation_decoder_cb
-.. autoblock:: gnuradio.digital.constellation_receiver_cb
-.. autoblock:: gnuradio.digital.correlate_access_code_bb
-.. autoblock:: gnuradio.digital.costas_loop_cc
-.. autoblock:: gnuradio.digital.cma_equalizer_cc
-.. autoblock:: gnuradio.digital.binary_slicer_fb
-.. autoblock:: gnuradio.digital.gmskmod_bc
-.. autoblock:: gnuradio.digital.probe_mpsk_snr_est_c
-.. autoblock:: gnuradio.digital.cpmmod_bc
+.. autooldblock:: gnuradio.digital.fll_band_edge_cc
+.. autooldblock:: gnuradio.digital.kurtotic_equalizer_cc
+.. autooldblock:: gnuradio.digital.lms_dd_equalizer_cc
+.. autooldblock:: gnuradio.digital.mpsk_receiver_cc
+.. autooldblock:: gnuradio.digital.mpsk_snr_est_cc
+.. autooldblock:: gnuradio.digital.clock_recovery_mm_cc
+.. autooldblock:: gnuradio.digital.clock_recovery_mm_ff
+.. autooldblock:: gnuradio.digital.constellation_decoder_cb
+.. autooldblock:: gnuradio.digital.constellation_receiver_cb
+.. autooldblock:: gnuradio.digital.correlate_access_code_bb
+.. autooldblock:: gnuradio.digital.costas_loop_cc
+.. autooldblock:: gnuradio.digital.cma_equalizer_cc
+.. autooldblock:: gnuradio.digital.binary_slicer_fb
+.. autooldblock:: gnuradio.digital.gmskmod_bc
+.. autooldblock:: gnuradio.digital.probe_mpsk_snr_est_c
+.. autooldblock:: gnuradio.digital.cpmmod_bc
 .. autopyblock:: gnuradio.digital.generic_demod
 .. autopyblock:: gnuradio.digital.generic_mod
 .. autopyblock:: gnuradio.digital.bpsk.dbpsk_demod
diff --git a/docs/sphinx/source/gr/coding_blk.rst b/docs/sphinx/source/gr/coding_blk.rst
index 87196a5aeb..e50b990bcd 100644
--- a/docs/sphinx/source/gr/coding_blk.rst
+++ b/docs/sphinx/source/gr/coding_blk.rst
@@ -1,11 +1,11 @@
 gnuradio.gr: Information Coding and Decoding
 ============================================
 
-.. autoblock:: gnuradio.gr.additive_scrambler_bb
-.. autoblock:: gnuradio.gr.descrambler_bb
-.. autoblock:: gnuradio.gr.diff_decoder_bb
-.. autoblock:: gnuradio.gr.diff_encoder_bb
-.. autoblock:: gnuradio.gr.fake_channel_encoder_pp
-.. autoblock:: gnuradio.gr.fake_channel_decoder_pp
-.. autoblock:: gnuradio.gr.map_bb
-.. autoblock:: gnuradio.gr.scrambler_bb
+.. autooldblock:: gnuradio.gr.additive_scrambler_bb
+.. autooldblock:: gnuradio.gr.descrambler_bb
+.. autooldblock:: gnuradio.gr.diff_decoder_bb
+.. autooldblock:: gnuradio.gr.diff_encoder_bb
+.. autooldblock:: gnuradio.gr.fake_channel_encoder_pp
+.. autooldblock:: gnuradio.gr.fake_channel_decoder_pp
+.. autooldblock:: gnuradio.gr.map_bb
+.. autooldblock:: gnuradio.gr.scrambler_bb
diff --git a/docs/sphinx/source/gr/converter_blk.rst b/docs/sphinx/source/gr/converter_blk.rst
index b0ddd1d8a9..790109a94f 100644
--- a/docs/sphinx/source/gr/converter_blk.rst
+++ b/docs/sphinx/source/gr/converter_blk.rst
@@ -1,32 +1,32 @@
 gnuradio.gr: Type Conversions
 =============================
 
-.. autoblock:: gnuradio.gr.bytes_to_syms
-.. autoblock:: gnuradio.gr.char_to_float
-.. autoblock:: gnuradio.gr.complex_to_interleaved_short
-.. autoblock:: gnuradio.gr.complex_to_float
-.. autoblock:: gnuradio.gr.complex_to_real
-.. autoblock:: gnuradio.gr.complex_to_imag
-.. autoblock:: gnuradio.gr.complex_to_mag
-.. autoblock:: gnuradio.gr.complex_to_mag_squared
-.. autoblock:: gnuradio.gr.complex_to_arg
-.. autoblock:: gnuradio.gr.float_to_char
-.. autoblock:: gnuradio.gr.float_to_complex
-.. autoblock:: gnuradio.gr.float_to_short
-.. autoblock:: gnuradio.gr.float_to_uchar
-.. autoblock:: gnuradio.gr.interleaved_short_to_complex
-.. autoblock:: gnuradio.gr.short_to_float
-.. autoblock:: gnuradio.gr.uchar_to_float
-.. autoblock:: gnuradio.gr.unpack_k_bits_bb
-.. autoblock:: gnuradio.gr.chunks_to_symbols_bc
-.. autoblock:: gnuradio.gr.chunks_to_symbols_bf
-.. autoblock:: gnuradio.gr.chunks_to_symbols_ic
-.. autoblock:: gnuradio.gr.chunks_to_symbols_if
-.. autoblock:: gnuradio.gr.chunks_to_symbols_sc
-.. autoblock:: gnuradio.gr.chunks_to_symbols_sf
-.. autoblock:: gnuradio.gr.packed_to_unpacked_bb
-.. autoblock:: gnuradio.gr.packed_to_unpacked_ii
-.. autoblock:: gnuradio.gr.packed_to_unpacked_ss
-.. autoblock:: gnuradio.gr.unpacked_to_packed_bb
-.. autoblock:: gnuradio.gr.unpacked_to_packed_ii
-.. autoblock:: gnuradio.gr.unpacked_to_packed_ss
+.. autooldblock:: gnuradio.gr.bytes_to_syms
+.. autooldblock:: gnuradio.gr.char_to_float
+.. autooldblock:: gnuradio.gr.complex_to_interleaved_short
+.. autooldblock:: gnuradio.gr.complex_to_float
+.. autooldblock:: gnuradio.gr.complex_to_real
+.. autooldblock:: gnuradio.gr.complex_to_imag
+.. autooldblock:: gnuradio.gr.complex_to_mag
+.. autooldblock:: gnuradio.gr.complex_to_mag_squared
+.. autooldblock:: gnuradio.gr.complex_to_arg
+.. autooldblock:: gnuradio.gr.float_to_char
+.. autooldblock:: gnuradio.gr.float_to_complex
+.. autooldblock:: gnuradio.gr.float_to_short
+.. autooldblock:: gnuradio.gr.float_to_uchar
+.. autooldblock:: gnuradio.gr.interleaved_short_to_complex
+.. autooldblock:: gnuradio.gr.short_to_float
+.. autooldblock:: gnuradio.gr.uchar_to_float
+.. autooldblock:: gnuradio.gr.unpack_k_bits_bb
+.. autooldblock:: gnuradio.gr.chunks_to_symbols_bc
+.. autooldblock:: gnuradio.gr.chunks_to_symbols_bf
+.. autooldblock:: gnuradio.gr.chunks_to_symbols_ic
+.. autooldblock:: gnuradio.gr.chunks_to_symbols_if
+.. autooldblock:: gnuradio.gr.chunks_to_symbols_sc
+.. autooldblock:: gnuradio.gr.chunks_to_symbols_sf
+.. autooldblock:: gnuradio.gr.packed_to_unpacked_bb
+.. autooldblock:: gnuradio.gr.packed_to_unpacked_ii
+.. autooldblock:: gnuradio.gr.packed_to_unpacked_ss
+.. autooldblock:: gnuradio.gr.unpacked_to_packed_bb
+.. autooldblock:: gnuradio.gr.unpacked_to_packed_ii
+.. autooldblock:: gnuradio.gr.unpacked_to_packed_ss
diff --git a/docs/sphinx/source/gr/demodulation_blk.rst b/docs/sphinx/source/gr/demodulation_blk.rst
index e5a9354340..4f800b642b 100644
--- a/docs/sphinx/source/gr/demodulation_blk.rst
+++ b/docs/sphinx/source/gr/demodulation_blk.rst
@@ -1,4 +1,4 @@
 gnuradio.gr: Demodulation
 =========================
 
-.. autoblock:: gnuradio.gr.quadrature_demod_cf
+.. autooldblock:: gnuradio.gr.quadrature_demod_cf
diff --git a/docs/sphinx/source/gr/dft_blk.rst b/docs/sphinx/source/gr/dft_blk.rst
index a93119969b..4ac1d2e621 100644
--- a/docs/sphinx/source/gr/dft_blk.rst
+++ b/docs/sphinx/source/gr/dft_blk.rst
@@ -1,6 +1,6 @@
 gnuradio.gr: Fourier Transform
 ==============================
 
-.. autoblock:: gnuradio.gr.goertzel_fc
-.. autoblock:: gnuradio.gr.fft_vcc
-.. autoblock:: gnuradio.gr.fft_vfc
+.. autooldblock:: gnuradio.gr.goertzel_fc
+.. autooldblock:: gnuradio.gr.fft_vcc
+.. autooldblock:: gnuradio.gr.fft_vfc
diff --git a/docs/sphinx/source/gr/filter_blk.rst b/docs/sphinx/source/gr/filter_blk.rst
index 767ee4b741..a73ddda2a8 100644
--- a/docs/sphinx/source/gr/filter_blk.rst
+++ b/docs/sphinx/source/gr/filter_blk.rst
@@ -1,46 +1,46 @@
 gnuradio.gr: Filters
 ====================
 
-.. autoblock:: gnuradio.gr.fft_filter_ccc
-.. autoblock:: gnuradio.gr.fft_filter_fff
-.. autoblock:: gnuradio.gr.filter_delay_fc
-.. autoblock:: gnuradio.gr.fir_filter_ccc
-.. autoblock:: gnuradio.gr.fir_filter_ccf
-.. autoblock:: gnuradio.gr.fir_filter_fcc
-.. autoblock:: gnuradio.gr.fir_filter_fff
-.. autoblock:: gnuradio.gr.fir_filter_fsf
-.. autoblock:: gnuradio.gr.fir_filter_scc
-.. autoblock:: gnuradio.gr.fractional_interpolator_cc
-.. autoblock:: gnuradio.gr.fractional_interpolator_ff
-.. autoblock:: gnuradio.gr.freq_xlating_fir_filter_ccc
-.. autoblock:: gnuradio.gr.freq_xlating_fir_filter_ccf
-.. autoblock:: gnuradio.gr.freq_xlating_fir_filter_fcc
-.. autoblock:: gnuradio.gr.freq_xlating_fir_filter_fcf
-.. autoblock:: gnuradio.gr.freq_xlating_fir_filter_scc
-.. autoblock:: gnuradio.gr.freq_xlating_fir_filter_scf
-.. autoblock:: gnuradio.gr.hilbert_fc
-.. autoblock:: gnuradio.gr.iir_filter_ffd
-.. autoblock:: gnuradio.gr.interp_fir_filter_ccc
-.. autoblock:: gnuradio.gr.interp_fir_filter_ccf
-.. autoblock:: gnuradio.gr.interp_fir_filter_fcc
-.. autoblock:: gnuradio.gr.interp_fir_filter_fff
-.. autoblock:: gnuradio.gr.interp_fir_filter_fsf
-.. autoblock:: gnuradio.gr.interp_fir_filter_scc
-.. autoblock:: gnuradio.gr.rational_resampler_base_ccc
-.. autoblock:: gnuradio.gr.rational_resampler_base_ccf
-.. autoblock:: gnuradio.gr.rational_resampler_base_fcc
-.. autoblock:: gnuradio.gr.rational_resampler_base_fff
-.. autoblock:: gnuradio.gr.rational_resampler_base_fsf
-.. autoblock:: gnuradio.gr.rational_resampler_base_scc
-.. autoblock:: gnuradio.gr.single_pole_iir_filter_cc
-.. autoblock:: gnuradio.gr.single_pole_iir_filter_ff
-.. autoblock:: gnuradio.gr.moving_average_cc
-.. autoblock:: gnuradio.gr.moving_average_ff
-.. autoblock:: gnuradio.gr.moving_average_ii
-.. autoblock:: gnuradio.gr.moving_average_ss
-.. autoblock:: gnuradio.gr.pfb_arb_resampler_ccf
-.. autoblock:: gnuradio.gr.pfb_channelizer_ccf
-.. autoblock:: gnuradio.gr.pfb_clock_sync_ccf
-.. autoblock:: gnuradio.gr.pfb_clock_sync_fff
-.. autoblock:: gnuradio.gr.pfb_decimator_ccf
-.. autoblock:: gnuradio.gr.pfb_interpolator_ccf
+.. autooldblock:: gnuradio.gr.fft_filter_ccc
+.. autooldblock:: gnuradio.gr.fft_filter_fff
+.. autooldblock:: gnuradio.gr.filter_delay_fc
+.. autooldblock:: gnuradio.gr.fir_filter_ccc
+.. autooldblock:: gnuradio.gr.fir_filter_ccf
+.. autooldblock:: gnuradio.gr.fir_filter_fcc
+.. autooldblock:: gnuradio.gr.fir_filter_fff
+.. autooldblock:: gnuradio.gr.fir_filter_fsf
+.. autooldblock:: gnuradio.gr.fir_filter_scc
+.. autooldblock:: gnuradio.gr.fractional_interpolator_cc
+.. autooldblock:: gnuradio.gr.fractional_interpolator_ff
+.. autooldblock:: gnuradio.gr.freq_xlating_fir_filter_ccc
+.. autooldblock:: gnuradio.gr.freq_xlating_fir_filter_ccf
+.. autooldblock:: gnuradio.gr.freq_xlating_fir_filter_fcc
+.. autooldblock:: gnuradio.gr.freq_xlating_fir_filter_fcf
+.. autooldblock:: gnuradio.gr.freq_xlating_fir_filter_scc
+.. autooldblock:: gnuradio.gr.freq_xlating_fir_filter_scf
+.. autooldblock:: gnuradio.gr.hilbert_fc
+.. autooldblock:: gnuradio.gr.iir_filter_ffd
+.. autooldblock:: gnuradio.gr.interp_fir_filter_ccc
+.. autooldblock:: gnuradio.gr.interp_fir_filter_ccf
+.. autooldblock:: gnuradio.gr.interp_fir_filter_fcc
+.. autooldblock:: gnuradio.gr.interp_fir_filter_fff
+.. autooldblock:: gnuradio.gr.interp_fir_filter_fsf
+.. autooldblock:: gnuradio.gr.interp_fir_filter_scc
+.. autooldblock:: gnuradio.gr.rational_resampler_base_ccc
+.. autooldblock:: gnuradio.gr.rational_resampler_base_ccf
+.. autooldblock:: gnuradio.gr.rational_resampler_base_fcc
+.. autooldblock:: gnuradio.gr.rational_resampler_base_fff
+.. autooldblock:: gnuradio.gr.rational_resampler_base_fsf
+.. autooldblock:: gnuradio.gr.rational_resampler_base_scc
+.. autooldblock:: gnuradio.gr.single_pole_iir_filter_cc
+.. autooldblock:: gnuradio.gr.single_pole_iir_filter_ff
+.. autooldblock:: gnuradio.gr.moving_average_cc
+.. autooldblock:: gnuradio.gr.moving_average_ff
+.. autooldblock:: gnuradio.gr.moving_average_ii
+.. autooldblock:: gnuradio.gr.moving_average_ss
+.. autooldblock:: gnuradio.gr.pfb_arb_resampler_ccf
+.. autooldblock:: gnuradio.gr.pfb_channelizer_ccf
+.. autooldblock:: gnuradio.gr.pfb_clock_sync_ccf
+.. autooldblock:: gnuradio.gr.pfb_clock_sync_fff
+.. autooldblock:: gnuradio.gr.pfb_decimator_ccf
+.. autooldblock:: gnuradio.gr.pfb_interpolator_ccf
diff --git a/docs/sphinx/source/gr/level_blk.rst b/docs/sphinx/source/gr/level_blk.rst
index 77ba2270df..d6c565c65d 100644
--- a/docs/sphinx/source/gr/level_blk.rst
+++ b/docs/sphinx/source/gr/level_blk.rst
@@ -1,26 +1,26 @@
 gnuradio.gr: Signal Level Control (AGC)
 =======================================
 
-.. autoblock:: gnuradio.gr.agc2_cc
-.. autoblock:: gnuradio.gr.agc2_ff
-.. autoblock:: gnuradio.gr.agc_cc
-.. autoblock:: gnuradio.gr.agc_ff
-.. autoblock:: gnuradio.gr.ctcss_squelch_ff
-.. autoblock:: gnuradio.gr.dpll_bb
-.. autoblock:: gnuradio.gr.feedforward_agc_cc
-.. autoblock:: gnuradio.gr.peak_detector2_fb
-.. autoblock:: gnuradio.gr.pwr_squelch_cc
-.. autoblock:: gnuradio.gr.pwr_squelch_ff
-.. autoblock:: gnuradio.gr.regenerate_bb
-.. autoblock:: gnuradio.gr.simple_squelch_cc
-.. autoblock:: gnuradio.gr.mute_cc
-.. autoblock:: gnuradio.gr.mute_ff
-.. autoblock:: gnuradio.gr.mute_ii
-.. autoblock:: gnuradio.gr.mute_ss
-.. autoblock:: gnuradio.gr.peak_detector_fb
-.. autoblock:: gnuradio.gr.peak_detector_ib
-.. autoblock:: gnuradio.gr.peak_detector_sb
-.. autoblock:: gnuradio.gr.sample_and_hold_bb
-.. autoblock:: gnuradio.gr.sample_and_hold_ff
-.. autoblock:: gnuradio.gr.sample_and_hold_ii
-.. autoblock:: gnuradio.gr.sample_and_hold_ss
+.. autooldblock:: gnuradio.gr.agc2_cc
+.. autooldblock:: gnuradio.gr.agc2_ff
+.. autooldblock:: gnuradio.gr.agc_cc
+.. autooldblock:: gnuradio.gr.agc_ff
+.. autooldblock:: gnuradio.gr.ctcss_squelch_ff
+.. autooldblock:: gnuradio.gr.dpll_bb
+.. autooldblock:: gnuradio.gr.feedforward_agc_cc
+.. autooldblock:: gnuradio.gr.peak_detector2_fb
+.. autooldblock:: gnuradio.gr.pwr_squelch_cc
+.. autooldblock:: gnuradio.gr.pwr_squelch_ff
+.. autooldblock:: gnuradio.gr.regenerate_bb
+.. autooldblock:: gnuradio.gr.simple_squelch_cc
+.. autooldblock:: gnuradio.gr.mute_cc
+.. autooldblock:: gnuradio.gr.mute_ff
+.. autooldblock:: gnuradio.gr.mute_ii
+.. autooldblock:: gnuradio.gr.mute_ss
+.. autooldblock:: gnuradio.gr.peak_detector_fb
+.. autooldblock:: gnuradio.gr.peak_detector_ib
+.. autooldblock:: gnuradio.gr.peak_detector_sb
+.. autooldblock:: gnuradio.gr.sample_and_hold_bb
+.. autooldblock:: gnuradio.gr.sample_and_hold_ff
+.. autooldblock:: gnuradio.gr.sample_and_hold_ii
+.. autooldblock:: gnuradio.gr.sample_and_hold_ss
diff --git a/docs/sphinx/source/gr/math_blk.rst b/docs/sphinx/source/gr/math_blk.rst
index a2ef51922e..7b9437f995 100644
--- a/docs/sphinx/source/gr/math_blk.rst
+++ b/docs/sphinx/source/gr/math_blk.rst
@@ -1,59 +1,59 @@
 gnuradio.gr: Mathematics
 ========================
 
-.. autoblock:: gnuradio.gr.conjugate_cc
-.. autoblock:: gnuradio.gr.nlog10_ff
-.. autoblock:: gnuradio.gr.rms_cf
-.. autoblock:: gnuradio.gr.rms_ff
-.. autoblock:: gnuradio.gr.add_cc
-.. autoblock:: gnuradio.gr.add_const_cc
-.. autoblock:: gnuradio.gr.add_const_ff
-.. autoblock:: gnuradio.gr.add_const_ii
-.. autoblock:: gnuradio.gr.add_const_sf
-.. autoblock:: gnuradio.gr.add_const_ss
-.. autoblock:: gnuradio.gr.add_const_vcc
-.. autoblock:: gnuradio.gr.add_const_vff
-.. autoblock:: gnuradio.gr.add_const_vii
-.. autoblock:: gnuradio.gr.add_const_vss
-.. autoblock:: gnuradio.gr.add_ff
-.. autoblock:: gnuradio.gr.add_ii
-.. autoblock:: gnuradio.gr.add_ss
-.. autoblock:: gnuradio.gr.and_bb
-.. autoblock:: gnuradio.gr.and_const_bb
-.. autoblock:: gnuradio.gr.and_const_ii
-.. autoblock:: gnuradio.gr.and_const_ss
-.. autoblock:: gnuradio.gr.and_ii
-.. autoblock:: gnuradio.gr.and_ss
-.. autoblock:: gnuradio.gr.divide_cc
-.. autoblock:: gnuradio.gr.divide_ff
-.. autoblock:: gnuradio.gr.divide_ii
-.. autoblock:: gnuradio.gr.divide_ss
-.. autoblock:: gnuradio.gr.integrate_cc
-.. autoblock:: gnuradio.gr.integrate_ff
-.. autoblock:: gnuradio.gr.integrate_ii
-.. autoblock:: gnuradio.gr.integrate_ss
-.. autoblock:: gnuradio.gr.multiply_cc
-.. autoblock:: gnuradio.gr.multiply_const_cc
-.. autoblock:: gnuradio.gr.multiply_const_ff
-.. autoblock:: gnuradio.gr.multiply_const_ii
-.. autoblock:: gnuradio.gr.multiply_const_ss
-.. autoblock:: gnuradio.gr.multiply_const_vcc
-.. autoblock:: gnuradio.gr.multiply_const_vff
-.. autoblock:: gnuradio.gr.multiply_const_vii
-.. autoblock:: gnuradio.gr.multiply_const_vss
-.. autoblock:: gnuradio.gr.multiply_ff
-.. autoblock:: gnuradio.gr.multiply_ii
-.. autoblock:: gnuradio.gr.multiply_ss
-.. autoblock:: gnuradio.gr.not_bb
-.. autoblock:: gnuradio.gr.not_ii
-.. autoblock:: gnuradio.gr.not_ss
-.. autoblock:: gnuradio.gr.or_bb
-.. autoblock:: gnuradio.gr.or_ii
-.. autoblock:: gnuradio.gr.or_ss
-.. autoblock:: gnuradio.gr.sub_cc
-.. autoblock:: gnuradio.gr.sub_ff
-.. autoblock:: gnuradio.gr.sub_ii
-.. autoblock:: gnuradio.gr.sub_ss
-.. autoblock:: gnuradio.gr.xor_bb
-.. autoblock:: gnuradio.gr.xor_ii
-.. autoblock:: gnuradio.gr.xor_ss
+.. autooldblock:: gnuradio.gr.conjugate_cc
+.. autooldblock:: gnuradio.gr.nlog10_ff
+.. autooldblock:: gnuradio.gr.rms_cf
+.. autooldblock:: gnuradio.gr.rms_ff
+.. autooldblock:: gnuradio.gr.add_cc
+.. autooldblock:: gnuradio.gr.add_const_cc
+.. autooldblock:: gnuradio.gr.add_const_ff
+.. autooldblock:: gnuradio.gr.add_const_ii
+.. autooldblock:: gnuradio.gr.add_const_sf
+.. autooldblock:: gnuradio.gr.add_const_ss
+.. autooldblock:: gnuradio.gr.add_const_vcc
+.. autooldblock:: gnuradio.gr.add_const_vff
+.. autooldblock:: gnuradio.gr.add_const_vii
+.. autooldblock:: gnuradio.gr.add_const_vss
+.. autooldblock:: gnuradio.gr.add_ff
+.. autooldblock:: gnuradio.gr.add_ii
+.. autooldblock:: gnuradio.gr.add_ss
+.. autooldblock:: gnuradio.gr.and_bb
+.. autooldblock:: gnuradio.gr.and_const_bb
+.. autooldblock:: gnuradio.gr.and_const_ii
+.. autooldblock:: gnuradio.gr.and_const_ss
+.. autooldblock:: gnuradio.gr.and_ii
+.. autooldblock:: gnuradio.gr.and_ss
+.. autooldblock:: gnuradio.gr.divide_cc
+.. autooldblock:: gnuradio.gr.divide_ff
+.. autooldblock:: gnuradio.gr.divide_ii
+.. autooldblock:: gnuradio.gr.divide_ss
+.. autooldblock:: gnuradio.gr.integrate_cc
+.. autooldblock:: gnuradio.gr.integrate_ff
+.. autooldblock:: gnuradio.gr.integrate_ii
+.. autooldblock:: gnuradio.gr.integrate_ss
+.. autooldblock:: gnuradio.gr.multiply_cc
+.. autooldblock:: gnuradio.gr.multiply_const_cc
+.. autooldblock:: gnuradio.gr.multiply_const_ff
+.. autooldblock:: gnuradio.gr.multiply_const_ii
+.. autooldblock:: gnuradio.gr.multiply_const_ss
+.. autooldblock:: gnuradio.gr.multiply_const_vcc
+.. autooldblock:: gnuradio.gr.multiply_const_vff
+.. autooldblock:: gnuradio.gr.multiply_const_vii
+.. autooldblock:: gnuradio.gr.multiply_const_vss
+.. autooldblock:: gnuradio.gr.multiply_ff
+.. autooldblock:: gnuradio.gr.multiply_ii
+.. autooldblock:: gnuradio.gr.multiply_ss
+.. autooldblock:: gnuradio.gr.not_bb
+.. autooldblock:: gnuradio.gr.not_ii
+.. autooldblock:: gnuradio.gr.not_ss
+.. autooldblock:: gnuradio.gr.or_bb
+.. autooldblock:: gnuradio.gr.or_ii
+.. autooldblock:: gnuradio.gr.or_ss
+.. autooldblock:: gnuradio.gr.sub_cc
+.. autooldblock:: gnuradio.gr.sub_ff
+.. autooldblock:: gnuradio.gr.sub_ii
+.. autooldblock:: gnuradio.gr.sub_ss
+.. autooldblock:: gnuradio.gr.xor_bb
+.. autooldblock:: gnuradio.gr.xor_ii
+.. autooldblock:: gnuradio.gr.xor_ss
diff --git a/docs/sphinx/source/gr/misc_blk.rst b/docs/sphinx/source/gr/misc_blk.rst
index f3bd2d943b..c69293056c 100644
--- a/docs/sphinx/source/gr/misc_blk.rst
+++ b/docs/sphinx/source/gr/misc_blk.rst
@@ -1,12 +1,12 @@
 gnuradio.gr: Miscellaneous Blocks
 =================================
 
-.. autoblock:: gnuradio.gr.copy
-.. autoblock:: gnuradio.gr.delay
-.. autoblock:: gnuradio.gr.kludge_copy
-.. autoblock:: gnuradio.gr.nop
-.. autoblock:: gnuradio.gr.pa_2x2_phase_combiner
-.. autoblock:: gnuradio.gr.repeat
-.. autoblock:: gnuradio.gr.threshold_ff
-.. autoblock:: gnuradio.gr.throttle
-.. autoblock:: gnuradio.gr.channel_model
+.. autooldblock:: gnuradio.gr.copy
+.. autooldblock:: gnuradio.gr.delay
+.. autooldblock:: gnuradio.gr.kludge_copy
+.. autooldblock:: gnuradio.gr.nop
+.. autooldblock:: gnuradio.gr.pa_2x2_phase_combiner
+.. autooldblock:: gnuradio.gr.repeat
+.. autooldblock:: gnuradio.gr.threshold_ff
+.. autooldblock:: gnuradio.gr.throttle
+.. autooldblock:: gnuradio.gr.channel_model
diff --git a/docs/sphinx/source/gr/modulation_blk.rst b/docs/sphinx/source/gr/modulation_blk.rst
index 7cc54d9dc5..1fff4614ca 100644
--- a/docs/sphinx/source/gr/modulation_blk.rst
+++ b/docs/sphinx/source/gr/modulation_blk.rst
@@ -1,6 +1,6 @@
 gnuradio.gr: Modulation
 =======================
 
-.. autoblock:: gnuradio.gr.cpfsk_bc
-.. autoblock:: gnuradio.gr.frequency_modulator_fc
-.. autoblock:: gnuradio.gr.phase_modulator_fc
+.. autooldblock:: gnuradio.gr.cpfsk_bc
+.. autooldblock:: gnuradio.gr.frequency_modulator_fc
+.. autooldblock:: gnuradio.gr.phase_modulator_fc
diff --git a/docs/sphinx/source/gr/sink_blk.rst b/docs/sphinx/source/gr/sink_blk.rst
index 8e5c7a4036..7608ff09b0 100644
--- a/docs/sphinx/source/gr/sink_blk.rst
+++ b/docs/sphinx/source/gr/sink_blk.rst
@@ -1,25 +1,25 @@
 gnuradio.gr: Signal Sinks
 =========================
 
-.. autoblock:: gnuradio.gr.bin_statistics_f
-.. autoblock:: gnuradio.gr.check_counting_s
-.. autoblock:: gnuradio.gr.check_lfsr_32k_s
-.. autoblock:: gnuradio.gr.framer_sink_1
-.. autoblock:: gnuradio.gr.null_sink
-.. autoblock:: gnuradio.gr.packet_sink
-.. autoblock:: gnuradio.gr.probe_avg_mag_sqrd_c
-.. autoblock:: gnuradio.gr.probe_avg_mag_sqrd_cf
-.. autoblock:: gnuradio.gr.probe_avg_mag_sqrd_f
-.. autoblock:: gnuradio.gr.probe_signal_f
-.. autoblock:: gnuradio.gr.vector_sink_b
-.. autoblock:: gnuradio.gr.vector_sink_c
-.. autoblock:: gnuradio.gr.vector_sink_f
-.. autoblock:: gnuradio.gr.vector_sink_i
-.. autoblock:: gnuradio.gr.vector_sink_s
-.. autoblock:: gnuradio.gr.file_descriptor_sink
-.. autoblock:: gnuradio.gr.file_sink
-.. autoblock:: gnuradio.gr.histo_sink_f
-.. autoblock:: gnuradio.gr.message_sink
-.. autoblock:: gnuradio.gr.oscope_sink_f
-.. autoblock:: gnuradio.gr.udp_sink
-.. autoblock:: gnuradio.gr.wavfile_sink
+.. autooldblock:: gnuradio.gr.bin_statistics_f
+.. autooldblock:: gnuradio.gr.check_counting_s
+.. autooldblock:: gnuradio.gr.check_lfsr_32k_s
+.. autooldblock:: gnuradio.gr.framer_sink_1
+.. autooldblock:: gnuradio.gr.null_sink
+.. autooldblock:: gnuradio.gr.packet_sink
+.. autooldblock:: gnuradio.gr.probe_avg_mag_sqrd_c
+.. autooldblock:: gnuradio.gr.probe_avg_mag_sqrd_cf
+.. autooldblock:: gnuradio.gr.probe_avg_mag_sqrd_f
+.. autooldblock:: gnuradio.gr.probe_signal_f
+.. autooldblock:: gnuradio.gr.vector_sink_b
+.. autooldblock:: gnuradio.gr.vector_sink_c
+.. autooldblock:: gnuradio.gr.vector_sink_f
+.. autooldblock:: gnuradio.gr.vector_sink_i
+.. autooldblock:: gnuradio.gr.vector_sink_s
+.. autooldblock:: gnuradio.gr.file_descriptor_sink
+.. autooldblock:: gnuradio.gr.file_sink
+.. autooldblock:: gnuradio.gr.histo_sink_f
+.. autooldblock:: gnuradio.gr.message_sink
+.. autooldblock:: gnuradio.gr.oscope_sink_f
+.. autooldblock:: gnuradio.gr.udp_sink
+.. autooldblock:: gnuradio.gr.wavfile_sink
diff --git a/docs/sphinx/source/gr/slicedice_blk.rst b/docs/sphinx/source/gr/slicedice_blk.rst
index 0bb5719ea6..e845627aad 100644
--- a/docs/sphinx/source/gr/slicedice_blk.rst
+++ b/docs/sphinx/source/gr/slicedice_blk.rst
@@ -1,14 +1,14 @@
 gnuradio.gr: Slicing and Dicing Streams
 =======================================
 
-.. autoblock:: gnuradio.gr.deinterleave
-.. autoblock:: gnuradio.gr.head
-.. autoblock:: gnuradio.gr.interleave
-.. autoblock:: gnuradio.gr.keep_one_in_n
-.. autoblock:: gnuradio.gr.skiphead
-.. autoblock:: gnuradio.gr.stream_to_streams
-.. autoblock:: gnuradio.gr.stream_to_vector
-.. autoblock:: gnuradio.gr.streams_to_stream
-.. autoblock:: gnuradio.gr.streams_to_vector
-.. autoblock:: gnuradio.gr.vector_to_stream
-.. autoblock:: gnuradio.gr.vector_to_streams
+.. autooldblock:: gnuradio.gr.deinterleave
+.. autooldblock:: gnuradio.gr.head
+.. autooldblock:: gnuradio.gr.interleave
+.. autooldblock:: gnuradio.gr.keep_one_in_n
+.. autooldblock:: gnuradio.gr.skiphead
+.. autooldblock:: gnuradio.gr.stream_to_streams
+.. autooldblock:: gnuradio.gr.stream_to_vector
+.. autooldblock:: gnuradio.gr.streams_to_stream
+.. autooldblock:: gnuradio.gr.streams_to_vector
+.. autooldblock:: gnuradio.gr.vector_to_stream
+.. autooldblock:: gnuradio.gr.vector_to_streams
diff --git a/docs/sphinx/source/gr/source_blk.rst b/docs/sphinx/source/gr/source_blk.rst
index e6e24e1b54..df873bcf74 100644
--- a/docs/sphinx/source/gr/source_blk.rst
+++ b/docs/sphinx/source/gr/source_blk.rst
@@ -1,26 +1,26 @@
 gnuradio.gr: Signal Sources
 ===========================
 
-.. autoblock:: gnuradio.gr.glfsr_source_b
-.. autoblock:: gnuradio.gr.glfsr_source_f
-.. autoblock:: gnuradio.gr.lfsr_32k_source_s
-.. autoblock:: gnuradio.gr.null_source
-.. autoblock:: gnuradio.gr.noise_source_c
-.. autoblock:: gnuradio.gr.noise_source_f
-.. autoblock:: gnuradio.gr.noise_source_i
-.. autoblock:: gnuradio.gr.noise_source_s
-.. autoblock:: gnuradio.gr.sig_source_c
-.. autoblock:: gnuradio.gr.sig_source_f
-.. autoblock:: gnuradio.gr.sig_source_i
-.. autoblock:: gnuradio.gr.sig_source_s
-.. autoblock:: gnuradio.gr.vector_source_b
-.. autoblock:: gnuradio.gr.vector_source_c
-.. autoblock:: gnuradio.gr.vector_source_f
-.. autoblock:: gnuradio.gr.vector_source_i
-.. autoblock:: gnuradio.gr.vector_source_s
-.. autoblock:: gnuradio.gr.file_descriptor_source
-.. autoblock:: gnuradio.gr.file_source
-.. autoblock:: gnuradio.gr.message_source
-.. autoblock:: gnuradio.gr.udp_source
-.. autoblock:: gnuradio.gr.wavfile_source
+.. autooldblock:: gnuradio.gr.glfsr_source_b
+.. autooldblock:: gnuradio.gr.glfsr_source_f
+.. autooldblock:: gnuradio.gr.lfsr_32k_source_s
+.. autooldblock:: gnuradio.gr.null_source
+.. autooldblock:: gnuradio.gr.noise_source_c
+.. autooldblock:: gnuradio.gr.noise_source_f
+.. autooldblock:: gnuradio.gr.noise_source_i
+.. autooldblock:: gnuradio.gr.noise_source_s
+.. autooldblock:: gnuradio.gr.sig_source_c
+.. autooldblock:: gnuradio.gr.sig_source_f
+.. autooldblock:: gnuradio.gr.sig_source_i
+.. autooldblock:: gnuradio.gr.sig_source_s
+.. autooldblock:: gnuradio.gr.vector_source_b
+.. autooldblock:: gnuradio.gr.vector_source_c
+.. autooldblock:: gnuradio.gr.vector_source_f
+.. autooldblock:: gnuradio.gr.vector_source_i
+.. autooldblock:: gnuradio.gr.vector_source_s
+.. autooldblock:: gnuradio.gr.file_descriptor_source
+.. autooldblock:: gnuradio.gr.file_source
+.. autooldblock:: gnuradio.gr.message_source
+.. autooldblock:: gnuradio.gr.udp_source
+.. autooldblock:: gnuradio.gr.wavfile_source
 
diff --git a/docs/sphinx/source/gr/sync_blk.rst b/docs/sphinx/source/gr/sync_blk.rst
index bb2b839741..be9f908f73 100644
--- a/docs/sphinx/source/gr/sync_blk.rst
+++ b/docs/sphinx/source/gr/sync_blk.rst
@@ -1,9 +1,9 @@
 gnuradio.gr: Synchronization
 ============================
 
-.. autoblock:: gnuradio.gr.pll_carriertracking_cc
-.. autoblock:: gnuradio.gr.pll_freqdet_cf
-.. autoblock:: gnuradio.gr.pll_refout_cc
-.. autoblock:: gnuradio.gr.pn_correlator_cc
-.. autoblock:: gnuradio.gr.simple_correlator
-.. autoblock:: gnuradio.gr.simple_framer
+.. autooldblock:: gnuradio.gr.pll_carriertracking_cc
+.. autooldblock:: gnuradio.gr.pll_freqdet_cf
+.. autooldblock:: gnuradio.gr.pll_refout_cc
+.. autooldblock:: gnuradio.gr.pn_correlator_cc
+.. autooldblock:: gnuradio.gr.simple_correlator
+.. autooldblock:: gnuradio.gr.simple_framer
diff --git a/docs/sphinx/source/noaa.rst b/docs/sphinx/source/noaa.rst
index 06c7078130..65461f99b8 100644
--- a/docs/sphinx/source/noaa.rst
+++ b/docs/sphinx/source/noaa.rst
@@ -3,6 +3,6 @@ gnuradio.noaa
 
 .. automodule:: gnuradio.noaa
 
-.. autoblock:: gnuradio.noaa.hrpt_decoder
-.. autoblock:: gnuradio.noaa.hrpt_deframer
-.. autoblock:: gnuradio.noaa.hrpt_pll_cf
+.. autooldblock:: gnuradio.noaa.hrpt_decoder
+.. autooldblock:: gnuradio.noaa.hrpt_deframer
+.. autooldblock:: gnuradio.noaa.hrpt_pll_cf
diff --git a/docs/sphinx/source/pager/blks.rst b/docs/sphinx/source/pager/blks.rst
index 9b5a2ca70d..a36103d1fa 100644
--- a/docs/sphinx/source/pager/blks.rst
+++ b/docs/sphinx/source/pager/blks.rst
@@ -1,9 +1,9 @@
 gnuradio.pager: Signal Processing Blocks
 ========================================
 
-.. autoblock:: gnuradio.pager.flex_deinterleave
+.. autooldblock:: gnuradio.pager.flex_deinterleave
 .. autopyblock:: gnuradio.pager.flex_demod
-.. autoblock:: gnuradio.pager.flex_frame
-.. autoblock:: gnuradio.pager.flex_parse
-.. autoblock:: gnuradio.pager.flex_sync
-.. autoblock:: gnuradio.pager.slicer_fb
+.. autooldblock:: gnuradio.pager.flex_frame
+.. autooldblock:: gnuradio.pager.flex_parse
+.. autooldblock:: gnuradio.pager.flex_sync
+.. autooldblock:: gnuradio.pager.slicer_fb
diff --git a/docs/sphinx/source/qtgui/index.rst b/docs/sphinx/source/qtgui/index.rst
index c6311d381a..83bdedca89 100644
--- a/docs/sphinx/source/qtgui/index.rst
+++ b/docs/sphinx/source/qtgui/index.rst
@@ -3,7 +3,7 @@ gnuradio.qtgui
 
 .. automodule:: gnuradio.qtgui
 
-.. autoblock:: gnuradio.qtgui.sink_c
-.. autoblock:: gnuradio.qtgui.sink_f
-.. autoblock:: gnuradio.qtgui.time_sink_c
-.. autoblock:: gnuradio.qtgui.time_sink_f
+.. autooldblock:: gnuradio.qtgui.sink_c
+.. autooldblock:: gnuradio.qtgui.sink_f
+.. autooldblock:: gnuradio.qtgui.time_sink_c
+.. autooldblock:: gnuradio.qtgui.time_sink_f
diff --git a/docs/sphinx/source/trellis/blks.rst b/docs/sphinx/source/trellis/blks.rst
index a2eda07d61..d82319bad6 100644
--- a/docs/sphinx/source/trellis/blks.rst
+++ b/docs/sphinx/source/trellis/blks.rst
@@ -1,62 +1,62 @@
 gnuradio.trellis: Signal Processing Blocks
 ==========================================
 
-.. autoblock:: gnuradio.trellis.constellation_metrics_cf
-.. autoblock:: gnuradio.trellis.encoder_bb
-.. autoblock:: gnuradio.trellis.encoder_bi
-.. autoblock:: gnuradio.trellis.encoder_bs
-.. autoblock:: gnuradio.trellis.encoder_ii
-.. autoblock:: gnuradio.trellis.encoder_si
-.. autoblock:: gnuradio.trellis.encoder_ss
-.. autoblock:: gnuradio.trellis.metrics_c
-.. autoblock:: gnuradio.trellis.metrics_f
-.. autoblock:: gnuradio.trellis.metrics_i
-.. autoblock:: gnuradio.trellis.metrics_s
-.. autoblock:: gnuradio.trellis.pccc_decoder_b
-.. autoblock:: gnuradio.trellis.pccc_decoder_combined_cb
-.. autoblock:: gnuradio.trellis.pccc_decoder_combined_ci
-.. autoblock:: gnuradio.trellis.pccc_decoder_combined_cs
-.. autoblock:: gnuradio.trellis.pccc_decoder_combined_fb
-.. autoblock:: gnuradio.trellis.pccc_decoder_combined_fi
-.. autoblock:: gnuradio.trellis.pccc_decoder_combined_fs
-.. autoblock:: gnuradio.trellis.pccc_decoder_i
-.. autoblock:: gnuradio.trellis.pccc_decoder_s
-.. autoblock:: gnuradio.trellis.pccc_encoder_bb
-.. autoblock:: gnuradio.trellis.pccc_encoder_bi
-.. autoblock:: gnuradio.trellis.pccc_encoder_bs
-.. autoblock:: gnuradio.trellis.pccc_encoder_ii
-.. autoblock:: gnuradio.trellis.pccc_encoder_si
-.. autoblock:: gnuradio.trellis.pccc_encoder_ss
-.. autoblock:: gnuradio.trellis.permutation
-.. autoblock:: gnuradio.trellis.sccc_decoder_b
-.. autoblock:: gnuradio.trellis.sccc_decoder_combined_cb
-.. autoblock:: gnuradio.trellis.sccc_decoder_combined_ci
-.. autoblock:: gnuradio.trellis.sccc_decoder_combined_cs
-.. autoblock:: gnuradio.trellis.sccc_decoder_combined_fb
-.. autoblock:: gnuradio.trellis.sccc_decoder_combined_fi
-.. autoblock:: gnuradio.trellis.sccc_decoder_combined_fs
-.. autoblock:: gnuradio.trellis.sccc_decoder_i
-.. autoblock:: gnuradio.trellis.sccc_decoder_s
-.. autoblock:: gnuradio.trellis.sccc_encoder_bb
-.. autoblock:: gnuradio.trellis.sccc_encoder_bi
-.. autoblock:: gnuradio.trellis.sccc_encoder_bs
-.. autoblock:: gnuradio.trellis.sccc_encoder_ii
-.. autoblock:: gnuradio.trellis.sccc_encoder_si
-.. autoblock:: gnuradio.trellis.sccc_encoder_ss
-.. autoblock:: gnuradio.trellis.siso_combined_f
-.. autoblock:: gnuradio.trellis.siso_f
-.. autoblock:: gnuradio.trellis.viterbi_b
-.. autoblock:: gnuradio.trellis.viterbi_combined_cb
-.. autoblock:: gnuradio.trellis.viterbi_combined_ci
-.. autoblock:: gnuradio.trellis.viterbi_combined_cs
-.. autoblock:: gnuradio.trellis.viterbi_combined_fb
-.. autoblock:: gnuradio.trellis.viterbi_combined_fi
-.. autoblock:: gnuradio.trellis.viterbi_combined_fs
-.. autoblock:: gnuradio.trellis.viterbi_combined_ib
-.. autoblock:: gnuradio.trellis.viterbi_combined_ii
-.. autoblock:: gnuradio.trellis.viterbi_combined_is
-.. autoblock:: gnuradio.trellis.viterbi_combined_sb
-.. autoblock:: gnuradio.trellis.viterbi_combined_si
-.. autoblock:: gnuradio.trellis.viterbi_combined_ss
-.. autoblock:: gnuradio.trellis.viterbi_i
-.. autoblock:: gnuradio.trellis.viterbi_s
+.. autooldblock:: gnuradio.trellis.constellation_metrics_cf
+.. autooldblock:: gnuradio.trellis.encoder_bb
+.. autooldblock:: gnuradio.trellis.encoder_bi
+.. autooldblock:: gnuradio.trellis.encoder_bs
+.. autooldblock:: gnuradio.trellis.encoder_ii
+.. autooldblock:: gnuradio.trellis.encoder_si
+.. autooldblock:: gnuradio.trellis.encoder_ss
+.. autooldblock:: gnuradio.trellis.metrics_c
+.. autooldblock:: gnuradio.trellis.metrics_f
+.. autooldblock:: gnuradio.trellis.metrics_i
+.. autooldblock:: gnuradio.trellis.metrics_s
+.. autooldblock:: gnuradio.trellis.pccc_decoder_b
+.. autooldblock:: gnuradio.trellis.pccc_decoder_combined_cb
+.. autooldblock:: gnuradio.trellis.pccc_decoder_combined_ci
+.. autooldblock:: gnuradio.trellis.pccc_decoder_combined_cs
+.. autooldblock:: gnuradio.trellis.pccc_decoder_combined_fb
+.. autooldblock:: gnuradio.trellis.pccc_decoder_combined_fi
+.. autooldblock:: gnuradio.trellis.pccc_decoder_combined_fs
+.. autooldblock:: gnuradio.trellis.pccc_decoder_i
+.. autooldblock:: gnuradio.trellis.pccc_decoder_s
+.. autooldblock:: gnuradio.trellis.pccc_encoder_bb
+.. autooldblock:: gnuradio.trellis.pccc_encoder_bi
+.. autooldblock:: gnuradio.trellis.pccc_encoder_bs
+.. autooldblock:: gnuradio.trellis.pccc_encoder_ii
+.. autooldblock:: gnuradio.trellis.pccc_encoder_si
+.. autooldblock:: gnuradio.trellis.pccc_encoder_ss
+.. autooldblock:: gnuradio.trellis.permutation
+.. autooldblock:: gnuradio.trellis.sccc_decoder_b
+.. autooldblock:: gnuradio.trellis.sccc_decoder_combined_cb
+.. autooldblock:: gnuradio.trellis.sccc_decoder_combined_ci
+.. autooldblock:: gnuradio.trellis.sccc_decoder_combined_cs
+.. autooldblock:: gnuradio.trellis.sccc_decoder_combined_fb
+.. autooldblock:: gnuradio.trellis.sccc_decoder_combined_fi
+.. autooldblock:: gnuradio.trellis.sccc_decoder_combined_fs
+.. autooldblock:: gnuradio.trellis.sccc_decoder_i
+.. autooldblock:: gnuradio.trellis.sccc_decoder_s
+.. autooldblock:: gnuradio.trellis.sccc_encoder_bb
+.. autooldblock:: gnuradio.trellis.sccc_encoder_bi
+.. autooldblock:: gnuradio.trellis.sccc_encoder_bs
+.. autooldblock:: gnuradio.trellis.sccc_encoder_ii
+.. autooldblock:: gnuradio.trellis.sccc_encoder_si
+.. autooldblock:: gnuradio.trellis.sccc_encoder_ss
+.. autooldblock:: gnuradio.trellis.siso_combined_f
+.. autooldblock:: gnuradio.trellis.siso_f
+.. autooldblock:: gnuradio.trellis.viterbi_b
+.. autooldblock:: gnuradio.trellis.viterbi_combined_cb
+.. autooldblock:: gnuradio.trellis.viterbi_combined_ci
+.. autooldblock:: gnuradio.trellis.viterbi_combined_cs
+.. autooldblock:: gnuradio.trellis.viterbi_combined_fb
+.. autooldblock:: gnuradio.trellis.viterbi_combined_fi
+.. autooldblock:: gnuradio.trellis.viterbi_combined_fs
+.. autooldblock:: gnuradio.trellis.viterbi_combined_ib
+.. autooldblock:: gnuradio.trellis.viterbi_combined_ii
+.. autooldblock:: gnuradio.trellis.viterbi_combined_is
+.. autooldblock:: gnuradio.trellis.viterbi_combined_sb
+.. autooldblock:: gnuradio.trellis.viterbi_combined_si
+.. autooldblock:: gnuradio.trellis.viterbi_combined_ss
+.. autooldblock:: gnuradio.trellis.viterbi_i
+.. autooldblock:: gnuradio.trellis.viterbi_s
diff --git a/docs/sphinx/source/video_sdl.rst b/docs/sphinx/source/video_sdl.rst
index e4fc5acac3..6be88d788c 100644
--- a/docs/sphinx/source/video_sdl.rst
+++ b/docs/sphinx/source/video_sdl.rst
@@ -3,5 +3,5 @@ gnuradio.video_sdl
 
 .. automodule:: gnuradio.video_sdl
 
-.. autoblock:: gnuradio.video_sdl.sink_s
-.. autoblock:: gnuradio.video_sdl.sink_uc
+.. autooldblock:: gnuradio.video_sdl.sink_s
+.. autooldblock:: gnuradio.video_sdl.sink_uc
diff --git a/docs/sphinx/source/vocoder/blks.rst b/docs/sphinx/source/vocoder/blks.rst
index ea20bc44be..34eda9d250 100644
--- a/docs/sphinx/source/vocoder/blks.rst
+++ b/docs/sphinx/source/vocoder/blks.rst
@@ -1,19 +1,19 @@
 gnuradio.vocoder
 ================
 
-.. autoblock:: gnuradio.vocoder.alaw_decode_bs
-.. autoblock:: gnuradio.vocoder.alaw_encode_sb
-.. autoblock:: gnuradio.vocoder.codec2_decode_ps
-.. autoblock:: gnuradio.vocoder.codec2_encode_sp
-.. autoblock:: gnuradio.vocoder.cvsd_decode_bs
-.. autoblock:: gnuradio.vocoder.cvsd_encode_sb
-.. autoblock:: gnuradio.vocoder.g721_decode_bs
-.. autoblock:: gnuradio.vocoder.g721_encode_sb
-.. autoblock:: gnuradio.vocoder.g723_24_decode_bs
-.. autoblock:: gnuradio.vocoder.g723_24_encode_sb
-.. autoblock:: gnuradio.vocoder.g723_40_decode_bs
-.. autoblock:: gnuradio.vocoder.g723_40_encode_sb
-.. autoblock:: gnuradio.vocoder.gsm_fr_decode_ps
-.. autoblock:: gnuradio.vocoder.gsm_fr_encode_sp
-.. autoblock:: gnuradio.vocoder.ulaw_decode_bs
-.. autoblock:: gnuradio.vocoder.ulaw_encode_sb
+.. autooldblock:: gnuradio.vocoder.alaw_decode_bs
+.. autooldblock:: gnuradio.vocoder.alaw_encode_sb
+.. autooldblock:: gnuradio.vocoder.codec2_decode_ps
+.. autooldblock:: gnuradio.vocoder.codec2_encode_sp
+.. autooldblock:: gnuradio.vocoder.cvsd_decode_bs
+.. autooldblock:: gnuradio.vocoder.cvsd_encode_sb
+.. autooldblock:: gnuradio.vocoder.g721_decode_bs
+.. autooldblock:: gnuradio.vocoder.g721_encode_sb
+.. autooldblock:: gnuradio.vocoder.g723_24_decode_bs
+.. autooldblock:: gnuradio.vocoder.g723_24_encode_sb
+.. autooldblock:: gnuradio.vocoder.g723_40_decode_bs
+.. autooldblock:: gnuradio.vocoder.g723_40_encode_sb
+.. autooldblock:: gnuradio.vocoder.gsm_fr_decode_ps
+.. autooldblock:: gnuradio.vocoder.gsm_fr_encode_sp
+.. autooldblock:: gnuradio.vocoder.ulaw_decode_bs
+.. autooldblock:: gnuradio.vocoder.ulaw_encode_sb
diff --git a/docs/sphinx/source/wavelet.rst b/docs/sphinx/source/wavelet.rst
index 679bab70c0..5236c4dbb2 100644
--- a/docs/sphinx/source/wavelet.rst
+++ b/docs/sphinx/source/wavelet.rst
@@ -3,6 +3,6 @@ gnuradio.wavelet
 
 .. automodule:: gnuradio.wavelet
 
-.. autoblock:: gnuradio.wavelet.squash_ff
-.. autoblock:: gnuradio.wavelet.wavelet_ff
-.. autoblock:: gnuradio.wavelet.wvps_ff
+.. autooldblock:: gnuradio.wavelet.squash_ff
+.. autooldblock:: gnuradio.wavelet.wavelet_ff
+.. autooldblock:: gnuradio.wavelet.wvps_ff
-- 
cgit v1.2.3


From 5f13956bfac00dadf350d97ccc8ddd555dc9b10e Mon Sep 17 00:00:00 2001
From: Josh Blum <josh@joshknows.com>
Date: Tue, 3 Jul 2012 13:52:11 -0700
Subject: docs: remove redundant retries from swig_doc.py

With proper build dependencies, it should not be needed.
---
 docs/doxygen/swig_doc.py | 100 ++++++++++++-----------------------------------
 1 file changed, 26 insertions(+), 74 deletions(-)

(limited to 'docs/doxygen/swig_doc.py')

diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
index 9277470984..f24608b3ee 100644
--- a/docs/doxygen/swig_doc.py
+++ b/docs/doxygen/swig_doc.py
@@ -1,5 +1,5 @@
 #
-# Copyright 2010,2011 Free Software Foundation, Inc.
+# Copyright 2010-2012 Free Software Foundation, Inc.
 # 
 # This file is part of GNU Radio
 # 
@@ -232,25 +232,7 @@ def make_block2_entry(di, block):
             params=make_func.params))
     return "\n\n".join(output)
 
-def wait_if_necessary(tries, swigdocfilename, item=None):
-    if item is not None:
-        extra = ', item {0}'.format(item.name())
-    else:
-        extra = ''
-    if(tries < 3):
-        # May not be built just yet; sleep and try again
-        sys.stderr.write("XML parsing problem with file {0}{1}, retrying.\n".format(
-                swigdocfilename, extra))
-        time.sleep(1)
-        tries += 1
-        return tries, True
-    else:
-        # if we've given it three tries, give up and raise an error
-        sys.stderr.write("XML parsing error with file {0}{1}. giving up.\n".format(
-                swigdocfilename, extra))
-        return tries, False
-
-def make_swig_interface_file(di, swigdocfilename, custom_output=None, tries=0):
+def make_swig_interface_file(di, swigdocfilename, custom_output=None):
     
     output = ["""
 /*
@@ -264,50 +246,32 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None, tries=0):
         output.append(custom_output)
 
     # Create docstrings for the blocks.
-    while(1):
-        try:
-            blocks = di.in_category(Block)
-            blocks2 = di.in_category(Block2)
-        except:
-            tries, try_again = wait_if_necessary(tries, swigdocfilename)
-            if not try_again:
-                raise
-        else:
-            break
+    blocks = di.in_category(Block)
+    blocks2 = di.in_category(Block2)
+
     make_funcs = set([])
     for block in blocks:
-        while(1):
-            try:
-                make_func = di.get_member(make_name(block.name()), DoxyFunction)
-                # Don't want to risk writing to output twice.
-                if make_func.name() not in make_funcs:
-                    make_funcs.add(make_func.name())
-                    output.append(make_block_entry(di, block))
-            except block.ParsingError:
-                sys.stderr.write('Parsing error for block {0}\n'.format(block.name()))
-            except:
-                tries, try_again = wait_if_necessary(tries, swigdocfilename, block)
-                if not try_again:
-                    raise
-            else:
-                break
+        try:
+            make_func = di.get_member(make_name(block.name()), DoxyFunction)
+            # Don't want to risk writing to output twice.
+            if make_func.name() not in make_funcs:
+                make_funcs.add(make_func.name())
+                output.append(make_block_entry(di, block))
+        except block.ParsingError:
+            sys.stderr.write('Parsing error for block {0}\n'.format(block.name()))
+            raise
+
     for block in blocks2:
-        while(1):
-            try:
-                make_func = block.get_member('make', DoxyFunction)
-                make_func_name = block.name() +'::make'
-                # Don't want to risk writing to output twice.
-                if make_func_name not in make_funcs:
-                    make_funcs.add(make_func_name)
-                    output.append(make_block2_entry(di, block))
-            except block.ParsingError:
-                sys.stderr.write('Parsing error for block {0}\n'.format(block.name()))
-            except:
-                tries, try_again = wait_if_necessary(tries, swigdocfilename, block)
-                if not try_again:
-                    raise
-            else:
-                break        
+        try:
+            make_func = block.get_member('make', DoxyFunction)
+            make_func_name = block.name() +'::make'
+            # Don't want to risk writing to output twice.
+            if make_func_name not in make_funcs:
+                make_funcs.add(make_func_name)
+                output.append(make_block2_entry(di, block))
+        except block.ParsingError:
+            sys.stderr.write('Parsing error for block {0}\n'.format(block.name()))
+            raise
 
     # Create docstrings for functions
     # Don't include the make functions since they have already been dealt with.
@@ -359,16 +323,4 @@ if __name__ == "__main__":
     custom_output = "\n\n".join(output)
 
     # Generate the docstrings interface file.
-    # If parsing error on NoSuchMember, try again by rereading everything.
-    # Give up after 3 tries.
-    tries = 0
-    while(1):
-        try:
-            make_swig_interface_file(di, swigdocfilename, custom_output=custom_output, tries=tries)
-        except:
-            tries, try_again = wait_if_necessary(tries, swigdocfilename)
-            if not try_again:
-                raise
-        else:
-            break
-        
+    make_swig_interface_file(di, swigdocfilename, custom_output=custom_output)
-- 
cgit v1.2.3