commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] [gnuradio] 03/20: python3: update doxygen files to bui


From: git
Subject: [Commit-gnuradio] [gnuradio] 03/20: python3: update doxygen files to build docs with python3
Date: Sun, 25 Dec 2016 03:59:56 +0000 (UTC)

This is an automated email from the git hooks/post-receive script.

jcorgan pushed a commit to branch python3
in repository gnuradio.

commit 22bea462545cd3555c6e43d436721aead47e5600
Author: Douglas Anderson <address@hidden>
Date:   Fri Dec 23 08:28:08 2016 -0800

    python3: update doxygen files to build docs with python3
    
    * Note: doxygen-latex support is not converted yet, as the default
      package pulls in python2.7
---
 docs/doxygen/doxyxml/__init__.py                |   2 +-
 docs/doxygen/doxyxml/base.py                    |  18 +-
 docs/doxygen/doxyxml/doxyindex.py               |   6 +-
 docs/doxygen/doxyxml/generated/compound.py      |   8 +-
 docs/doxygen/doxyxml/generated/compoundsuper.py |  26 +-
 docs/doxygen/doxyxml/generated/index.py         |   4 +-
 docs/doxygen/doxyxml/generated/indexsuper.py    |   8 +-
 docs/doxygen/doxyxml/text.py                    |   2 +-
 docs/doxygen/other/doxypy.py                    | 716 ++++++++++++------------
 docs/doxygen/swig_doc.py                        |   8 +-
 10 files changed, 402 insertions(+), 396 deletions(-)

diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py
index 5cd0b3c..cf842c9 100644
--- a/docs/doxygen/doxyxml/__init__.py
+++ b/docs/doxygen/doxyxml/__init__.py
@@ -64,7 +64,7 @@ u'Outputs the vital aadvark statistics.'
 
 """
 
-from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, 
DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, 
DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther
 
 def _test():
     import os
diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py
index e8f026a..abca434 100644
--- a/docs/doxygen/doxyxml/base.py
+++ b/docs/doxygen/doxyxml/base.py
@@ -25,23 +25,25 @@ Classes based upon this are used to make more user-friendly 
interfaces
 to the doxygen xml docs than the generated classes provide.
 """
 
+from __future__ import print_function
+
 import os
 import pdb
 
 from xml.parsers.expat import ExpatError
 
-from generated import compound
+from .generated import compound
 
 
 class Base(object):
 
-    class Duplicate(StandardError):
+    class Duplicate(Exception):
         pass
 
-    class NoSuchMember(StandardError):
+    class NoSuchMember(Exception):
         pass
 
-    class ParsingError(StandardError):
+    class ParsingError(Exception):
         pass
 
     def __init__(self, parse_data, top=None):
@@ -94,7 +96,7 @@ class Base(object):
         for cls in self.mem_classes:
             if cls.can_parse(mem):
                 return cls
-        raise StandardError(("Did not find a class for object '%s'." \
+        raise Exception(("Did not find a class for object '%s'." \
                                  % (mem.get_name())))
 
     def convert_mem(self, mem):
@@ -102,11 +104,11 @@ class Base(object):
             cls = self.get_cls(mem)
             converted = cls.from_parse_data(mem, self.top)
             if converted is None:
-                raise StandardError('No class matched this object.')
+                raise Exception('No class matched this object.')
             self.add_ref(converted)
             return converted
-        except StandardError, e:
-            print e
+        except Exception as e:
+            print(e)
 
     @classmethod
     def includes(cls, inst):
diff --git a/docs/doxygen/doxyxml/doxyindex.py 
b/docs/doxygen/doxyxml/doxyindex.py
index e039737..52f0b45 100644
--- a/docs/doxygen/doxyxml/doxyindex.py
+++ b/docs/doxygen/doxyxml/doxyindex.py
@@ -25,9 +25,9 @@ docs than the generated classes provide.
 
 import os
 
-from generated import index
-from base import Base
-from text import description
+from .generated import index
+from .base import Base
+from .text import description
 
 class DoxyIndex(Base):
     """
diff --git a/docs/doxygen/doxyxml/generated/compound.py 
b/docs/doxygen/doxyxml/generated/compound.py
index 1522ac2..294f021 100644
--- a/docs/doxygen/doxyxml/generated/compound.py
+++ b/docs/doxygen/doxyxml/generated/compound.py
@@ -4,14 +4,14 @@
 Generated Mon Feb  9 19:08:05 2009 by generateDS.py.
 """
 
-from string import lower as str_lower
+
 from xml.dom import minidom
 from xml.dom import Node
 
 import sys
 
-import compoundsuper as supermod
-from compoundsuper import MixedContainer
+from . import compoundsuper as supermod
+from .compoundsuper import MixedContainer
 
 
 class DoxygenTypeSub(supermod.DoxygenType):
@@ -499,5 +499,3 @@ def parse(inFilename):
     rootObj = supermod.DoxygenType.factory()
     rootObj.build(rootNode)
     return rootObj
-
-
diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py 
b/docs/doxygen/doxyxml/generated/compoundsuper.py
index 6255dda..6870d7d 100644
--- a/docs/doxygen/doxyxml/generated/compoundsuper.py
+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py
@@ -4,9 +4,11 @@
 # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.
 #
 
+from __future__ import print_function
+
 import sys
 import getopt
-from string import lower as str_lower
+
 from xml.dom import minidom
 from xml.dom import Node
 
@@ -19,7 +21,7 @@ from xml.dom import Node
 
 try:
     from generatedssuper import GeneratedsSuper
-except ImportError, exp:
+except ImportError as exp:
 
     class GeneratedsSuper:
         def format_string(self, input_data, input_name=''):
@@ -4221,7 +4223,7 @@ class codelineType(GeneratedsSuper):
         if attrs.get('lineno'):
             try:
                 self.lineno = int(attrs.get('lineno').value)
-            except ValueError, exp:
+            except ValueError as exp:
                 raise ValueError('Bad integer attribute (lineno): %s' % exp)
         if attrs.get('refkind'):
             self.refkind = attrs.get('refkind').value
@@ -4504,12 +4506,12 @@ class referenceType(GeneratedsSuper):
         if attrs.get('endline'):
             try:
                 self.endline = int(attrs.get('endline').value)
-            except ValueError, exp:
+            except ValueError as exp:
                 raise ValueError('Bad integer attribute (endline): %s' % exp)
         if attrs.get('startline'):
             try:
                 self.startline = int(attrs.get('startline').value)
-            except ValueError, exp:
+            except ValueError as exp:
                 raise ValueError('Bad integer attribute (startline): %s' % exp)
         if attrs.get('refid'):
             self.refid = attrs.get('refid').value
@@ -4627,17 +4629,17 @@ class locationType(GeneratedsSuper):
         if attrs.get('bodystart'):
             try:
                 self.bodystart = int(attrs.get('bodystart').value)
-            except ValueError, exp:
+            except ValueError as exp:
                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)
         if attrs.get('line'):
             try:
                 self.line = int(attrs.get('line').value)
-            except ValueError, exp:
+            except ValueError as exp:
                 raise ValueError('Bad integer attribute (line): %s' % exp)
         if attrs.get('bodyend'):
             try:
                 self.bodyend = int(attrs.get('bodyend').value)
-            except ValueError, exp:
+            except ValueError as exp:
                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)
         if attrs.get('bodyfile'):
             self.bodyfile = attrs.get('bodyfile').value
@@ -6778,12 +6780,12 @@ class docTableType(GeneratedsSuper):
         if attrs.get('rows'):
             try:
                 self.rows = int(attrs.get('rows').value)
-            except ValueError, exp:
+            except ValueError as exp:
                 raise ValueError('Bad integer attribute (rows): %s' % exp)
         if attrs.get('cols'):
             try:
                 self.cols = int(attrs.get('cols').value)
-            except ValueError, exp:
+            except ValueError as exp:
                 raise ValueError('Bad integer attribute (cols): %s' % exp)
     def buildChildren(self, child_, nodeName_):
         if child_.nodeType == Node.ELEMENT_NODE and \
@@ -7108,7 +7110,7 @@ class docHeadingType(GeneratedsSuper):
         if attrs.get('level'):
             try:
                 self.level = int(attrs.get('level').value)
-            except ValueError, exp:
+            except ValueError as exp:
                 raise ValueError('Bad integer attribute (level): %s' % exp)
     def buildChildren(self, child_, nodeName_):
         if child_.nodeType == Node.TEXT_NODE:
@@ -8283,7 +8285,7 @@ Options:
 """
 
 def usage():
-    print USAGE_TEXT
+    print(USAGE_TEXT)
     sys.exit(1)
 
 
diff --git a/docs/doxygen/doxyxml/generated/index.py 
b/docs/doxygen/doxyxml/generated/index.py
index 7a70e14..c58407d 100644
--- a/docs/doxygen/doxyxml/generated/index.py
+++ b/docs/doxygen/doxyxml/generated/index.py
@@ -8,9 +8,9 @@ from xml.dom import minidom
 
 import os
 import sys
-import compound
+from . import compound
 
-import indexsuper as supermod
+from . import indexsuper as supermod
 
 class DoxygenTypeSub(supermod.DoxygenType):
     def __init__(self, version=None, compound=None):
diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py 
b/docs/doxygen/doxyxml/generated/indexsuper.py
index a991530..cf05969 100644
--- a/docs/doxygen/doxyxml/generated/indexsuper.py
+++ b/docs/doxygen/doxyxml/generated/indexsuper.py
@@ -4,9 +4,11 @@
 # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.
 #
 
+from __future__ import print_function
+
 import sys
 import getopt
-from string import lower as str_lower
+
 from xml.dom import minidom
 from xml.dom import Node
 
@@ -19,7 +21,7 @@ from xml.dom import Node
 
 try:
     from generatedssuper import GeneratedsSuper
-except ImportError, exp:
+except ImportError as exp:
 
     class GeneratedsSuper:
         def format_string(self, input_data, input_name=''):
@@ -462,7 +464,7 @@ Options:
 """
 
 def usage():
-    print USAGE_TEXT
+    print(USAGE_TEXT)
     sys.exit(1)
 
 
diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py
index 629edd1..12f9d17 100644
--- a/docs/doxygen/doxyxml/text.py
+++ b/docs/doxygen/doxyxml/text.py
@@ -49,7 +49,7 @@ def description_bit(obj):
     elif is_string(obj):
         return obj
     else:
-        raise StandardError('Expecting a string or something with content, 
content_ or value attribute')
+        raise Exception('Expecting a string or something with content, 
content_ or value attribute')
     # If this bit is a paragraph then add one some line breaks.
     if hasattr(obj, 'name') and obj.name == 'para':
         result += "\n\n"
diff --git a/docs/doxygen/other/doxypy.py b/docs/doxygen/other/doxypy.py
index a9af32a..cc38ddb 100755
--- a/docs/doxygen/other/doxypy.py
+++ b/docs/doxygen/other/doxypy.py
@@ -1,5 +1,7 @@
 #!/usr/bin/env python
 
+from __future__ import print_function
+
 __applicationName__ = "doxypy"
 __blurb__ = """
 doxypy is an input filter for Doxygen. It preprocesses python
@@ -11,8 +13,8 @@ __doc__ = __blurb__ + \
 """
 In order to make Doxygen preprocess files through doxypy, simply
 add the following lines to your Doxyfile:
-       FILTER_SOURCE_FILES = YES
-       INPUT_FILTER = "python /path/to/doxypy.py"
+    FILTER_SOURCE_FILES = YES
+    INPUT_FILTER = "python /path/to/doxypy.py"
 """
 
 __version__ = "0.4.2"
@@ -20,8 +22,8 @@ __date__ = "5th December 2008"
 __website__ = "http://code.foosel.org/doxypy";
 
 __author__ = (
-       "Philippe 'demod' Neumann (doxypy at demod dot org)",
-       "Gina 'foosel' Haeussge (gina at foosel dot net)"
+    "Philippe 'demod' Neumann (doxypy at demod dot org)",
+    "Gina 'foosel' Haeussge (gina at foosel dot net)"
 )
 
 __licenseName__ = "GPL v2"
@@ -45,364 +47,364 @@ import re
 from argparse import ArgumentParser
 
 class FSM(object):
-       """Implements a finite state machine.
-
-       Transitions are given as 4-tuples, consisting of an origin state, a 
target
-       state, a condition for the transition (given as a reference to a 
function
-       which gets called with a given piece of input) and a pointer to a 
function
-       to be called upon the execution of the given transition.
-       """
-
-       """
-       @var transitions holds the transitions
-       @var current_state holds the current state
-       @var current_input holds the current input
-       @var current_transition hold the currently active transition
-       """
-
-       def __init__(self, start_state=None, transitions=[]):
-               self.transitions = transitions
-               self.current_state = start_state
-               self.current_input = None
-               self.current_transition = None
-
-       def setStartState(self, state):
-               self.current_state = state
-
-       def addTransition(self, from_state, to_state, condition, callback):
-               self.transitions.append([from_state, to_state, condition, 
callback])
-
-       def makeTransition(self, input):
-               """ Makes a transition based on the given input.
-
-               @param  input   input to parse by the FSM
-               """
-               for transition in self.transitions:
-                       [from_state, to_state, condition, callback] = transition
-                       if from_state == self.current_state:
-                               match = condition(input)
-                               if match:
-                                       self.current_state = to_state
-                                       self.current_input = input
-                                       self.current_transition = transition
-                                       if args.debug:
-                                               print >>sys.stderr, "# FSM: 
executing (%s -> %s) for line '%s'" % (from_state, to_state, input)
-                                       callback(match)
-                                       return
+    """Implements a finite state machine.
+
+    Transitions are given as 4-tuples, consisting of an origin state, a target
+    state, a condition for the transition (given as a reference to a function
+    which gets called with a given piece of input) and a pointer to a function
+    to be called upon the execution of the given transition.
+    """
+
+    """
+    @var transitions holds the transitions
+    @var current_state holds the current state
+    @var current_input holds the current input
+    @var current_transition hold the currently active transition
+    """
+
+    def __init__(self, start_state=None, transitions=[]):
+        self.transitions = transitions
+        self.current_state = start_state
+        self.current_input = None
+        self.current_transition = None
+
+    def setStartState(self, state):
+        self.current_state = state
+
+    def addTransition(self, from_state, to_state, condition, callback):
+        self.transitions.append([from_state, to_state, condition, callback])
+
+    def makeTransition(self, input):
+        """ Makes a transition based on the given input.
+
+        @param    input    input to parse by the FSM
+        """
+        for transition in self.transitions:
+            [from_state, to_state, condition, callback] = transition
+            if from_state == self.current_state:
+                match = condition(input)
+                if match:
+                    self.current_state = to_state
+                    self.current_input = input
+                    self.current_transition = transition
+                    if args.debug:
+                        print("# FSM: executing (%s -> %s) for line '%s'" % 
(from_state, to_state, input), file=sys.stderr)
+                    callback(match)
+                    return
 
 class Doxypy(object):
-       def __init__(self):
-               string_prefixes = "[uU]?[rR]?"
-
-               self.start_single_comment_re = re.compile("^\s*%s(''')" % 
string_prefixes)
-               self.end_single_comment_re = re.compile("(''')\s*$")
-
-               self.start_double_comment_re = re.compile("^\s*%s(\"\"\")" % 
string_prefixes)
-               self.end_double_comment_re = re.compile("(\"\"\")\s*$")
-
-               self.single_comment_re = re.compile("^\s*%s(''').*(''')\s*$" % 
string_prefixes)
-               self.double_comment_re = 
re.compile("^\s*%s(\"\"\").*(\"\"\")\s*$" % string_prefixes)
-
-               self.defclass_re = re.compile("^(\s*)(def .+:|class .+:)")
-               self.empty_re = re.compile("^\s*$")
-               self.hashline_re = re.compile("^\s*#.*$")
-               self.importline_re = re.compile("^\s*(import |from .+ import)")
-
-               self.multiline_defclass_start_re = 
re.compile("^(\s*)(def|class)(\s.*)?$")
-               self.multiline_defclass_end_re = re.compile(":\s*$")
-
-               ## Transition list format
-               #  ["FROM", "TO", condition, action]
-               transitions = [
-                       ### FILEHEAD
-
-                       # single line comments
-                       ["FILEHEAD", "FILEHEAD", self.single_comment_re.search, 
self.appendCommentLine],
-                       ["FILEHEAD", "FILEHEAD", self.double_comment_re.search, 
self.appendCommentLine],
-
-                       # multiline comments
-                       ["FILEHEAD", "FILEHEAD_COMMENT_SINGLE", 
self.start_single_comment_re.search, self.appendCommentLine],
-                       ["FILEHEAD_COMMENT_SINGLE", "FILEHEAD", 
self.end_single_comment_re.search, self.appendCommentLine],
-                       ["FILEHEAD_COMMENT_SINGLE", "FILEHEAD_COMMENT_SINGLE", 
self.catchall, self.appendCommentLine],
-                       ["FILEHEAD", "FILEHEAD_COMMENT_DOUBLE", 
self.start_double_comment_re.search, self.appendCommentLine],
-                       ["FILEHEAD_COMMENT_DOUBLE", "FILEHEAD", 
self.end_double_comment_re.search, self.appendCommentLine],
-                       ["FILEHEAD_COMMENT_DOUBLE", "FILEHEAD_COMMENT_DOUBLE", 
self.catchall, self.appendCommentLine],
-
-                       # other lines
-                       ["FILEHEAD", "FILEHEAD", self.empty_re.search, 
self.appendFileheadLine],
-                       ["FILEHEAD", "FILEHEAD", self.hashline_re.search, 
self.appendFileheadLine],
-                       ["FILEHEAD", "FILEHEAD", self.importline_re.search, 
self.appendFileheadLine],
-                       ["FILEHEAD", "DEFCLASS", self.defclass_re.search, 
self.resetCommentSearch],
-                       ["FILEHEAD", "DEFCLASS_MULTI", 
self.multiline_defclass_start_re.search, self.resetCommentSearch],
-                       ["FILEHEAD", "DEFCLASS_BODY", self.catchall, 
self.appendFileheadLine],
-
-                       ### DEFCLASS
-
-                       # single line comments
-                       ["DEFCLASS", "DEFCLASS_BODY", 
self.single_comment_re.search, self.appendCommentLine],
-                       ["DEFCLASS", "DEFCLASS_BODY", 
self.double_comment_re.search, self.appendCommentLine],
-
-                       # multiline comments
-                       ["DEFCLASS", "COMMENT_SINGLE", 
self.start_single_comment_re.search, self.appendCommentLine],
-                       ["COMMENT_SINGLE", "DEFCLASS_BODY", 
self.end_single_comment_re.search, self.appendCommentLine],
-                       ["COMMENT_SINGLE", "COMMENT_SINGLE", self.catchall, 
self.appendCommentLine],
-                       ["DEFCLASS", "COMMENT_DOUBLE", 
self.start_double_comment_re.search, self.appendCommentLine],
-                       ["COMMENT_DOUBLE", "DEFCLASS_BODY", 
self.end_double_comment_re.search, self.appendCommentLine],
-                       ["COMMENT_DOUBLE", "COMMENT_DOUBLE", self.catchall, 
self.appendCommentLine],
-
-                       # other lines
-                       ["DEFCLASS", "DEFCLASS", self.empty_re.search, 
self.appendDefclassLine],
-                       ["DEFCLASS", "DEFCLASS", self.defclass_re.search, 
self.resetCommentSearch],
-                       ["DEFCLASS", "DEFCLASS_MULTI", 
self.multiline_defclass_start_re.search, self.resetCommentSearch],
-                       ["DEFCLASS", "DEFCLASS_BODY", self.catchall, 
self.stopCommentSearch],
-
-                       ### DEFCLASS_BODY
-
-                       ["DEFCLASS_BODY", "DEFCLASS", self.defclass_re.search, 
self.startCommentSearch],
-                       ["DEFCLASS_BODY", "DEFCLASS_MULTI", 
self.multiline_defclass_start_re.search, self.startCommentSearch],
-                       ["DEFCLASS_BODY", "DEFCLASS_BODY", self.catchall, 
self.appendNormalLine],
-
-                       ### DEFCLASS_MULTI
-                       ["DEFCLASS_MULTI", "DEFCLASS", 
self.multiline_defclass_end_re.search, self.appendDefclassLine],
-                       ["DEFCLASS_MULTI", "DEFCLASS_MULTI", self.catchall, 
self.appendDefclassLine],
-               ]
-
-               self.fsm = FSM("FILEHEAD", transitions)
-               self.outstream = sys.stdout
-
-               self.output = []
-               self.comment = []
-               self.filehead = []
-               self.defclass = []
-               self.indent = ""
-
-       def __closeComment(self):
-               """Appends any open comment block and triggering block to the 
output."""
-
-               if args.autobrief:
-                       if len(self.comment) == 1 \
-                       or (len(self.comment) > 2 and self.comment[1].strip() 
== ''):
-                               self.comment[0] = 
self.__docstringSummaryToBrief(self.comment[0])
-
-               if self.comment:
-                       block = self.makeCommentBlock()
-                       self.output.extend(block)
-
-               if self.defclass:
-                       self.output.extend(self.defclass)
-
-       def __docstringSummaryToBrief(self, line):
-               """Adds \\brief to the docstrings summary line.
-
-               A \\brief is prepended, provided no other doxygen command is at 
the
-               start of the line.
-               """
-               stripped = line.strip()
-               if stripped and not stripped[0] in ('@', '\\'):
-                       return "\\brief " + line
-               else:
-                       return line
-
-       def __flushBuffer(self):
-               """Flushes the current outputbuffer to the outstream."""
-               if self.output:
-                       try:
-                               if args.debug:
-                                       print >>sys.stderr, "# OUTPUT: ", 
self.output
-                               print >>self.outstream, "\n".join(self.output)
-                               self.outstream.flush()
-                       except IOError:
-                               # Fix for FS#33. Catches "broken pipe" when 
doxygen closes
-                               # stdout prematurely upon usage of 
INPUT_FILTER, INLINE_SOURCES
-                               # and FILTER_SOURCE_FILES.
-                               pass
-               self.output = []
-
-       def catchall(self, input):
-               """The catchall-condition, always returns true."""
-               return True
-
-       def resetCommentSearch(self, match):
-               """Restarts a new comment search for a different triggering 
line.
-
-               Closes the current commentblock and starts a new comment search.
-               """
-               if args.debug:
-                       print >>sys.stderr, "# CALLBACK: resetCommentSearch"
-               self.__closeComment()
-               self.startCommentSearch(match)
-
-       def startCommentSearch(self, match):
-               """Starts a new comment search.
-
-               Saves the triggering line, resets the current comment and saves
-               the current indentation.
-               """
-               if args.debug:
-                       print >>sys.stderr, "# CALLBACK: startCommentSearch"
-               self.defclass = [self.fsm.current_input]
-               self.comment = []
-               self.indent = match.group(1)
-
-       def stopCommentSearch(self, match):
-               """Stops a comment search.
-
-               Closes the current commentblock, resets the triggering line and
-               appends the current line to the output.
-               """
-               if args.debug:
-                       print >>sys.stderr, "# CALLBACK: stopCommentSearch"
-               self.__closeComment()
-
-               self.defclass = []
-               self.output.append(self.fsm.current_input)
-
-       def appendFileheadLine(self, match):
-               """Appends a line in the FILEHEAD state.
-
-               Closes the open comment block, resets it and appends the 
current line.
-               """
-               if args.debug:
-                       print >>sys.stderr, "# CALLBACK: appendFileheadLine"
-               self.__closeComment()
-               self.comment = []
-               self.output.append(self.fsm.current_input)
-
-       def appendCommentLine(self, match):
-               """Appends a comment line.
-
-               The comment delimiter is removed from multiline start and ends 
as
-               well as singleline comments.
-               """
-               if args.debug:
-                       print >>sys.stderr, "# CALLBACK: appendCommentLine"
-               (from_state, to_state, condition, callback) = 
self.fsm.current_transition
-
-               # single line comment
-               if (from_state == "DEFCLASS" and to_state == "DEFCLASS_BODY") \
-               or (from_state == "FILEHEAD" and to_state == "FILEHEAD"):
-                       # remove comment delimiter from begin and end of the 
line
-                       activeCommentDelim = match.group(1)
-                       line = self.fsm.current_input
-                       
self.comment.append(line[line.find(activeCommentDelim)+len(activeCommentDelim):line.rfind(activeCommentDelim)])
-
-                       if (to_state == "DEFCLASS_BODY"):
-                               self.__closeComment()
-                               self.defclass = []
-               # multiline start
-               elif from_state == "DEFCLASS" or from_state == "FILEHEAD":
-                       # remove comment delimiter from begin of the line
-                       activeCommentDelim = match.group(1)
-                       line = self.fsm.current_input
-                       
self.comment.append(line[line.find(activeCommentDelim)+len(activeCommentDelim):])
-               # multiline end
-               elif to_state == "DEFCLASS_BODY" or to_state == "FILEHEAD":
-                       # remove comment delimiter from end of the line
-                       activeCommentDelim = match.group(1)
-                       line = self.fsm.current_input
-                       
self.comment.append(line[0:line.rfind(activeCommentDelim)])
-                       if (to_state == "DEFCLASS_BODY"):
-                               self.__closeComment()
-                               self.defclass = []
-               # in multiline comment
-               else:
-                       # just append the comment line
-                       self.comment.append(self.fsm.current_input)
-
-       def appendNormalLine(self, match):
-               """Appends a line to the output."""
-               if args.debug:
-                       print >>sys.stderr, "# CALLBACK: appendNormalLine"
-               self.output.append(self.fsm.current_input)
-
-       def appendDefclassLine(self, match):
-               """Appends a line to the triggering block."""
-               if args.debug:
-                       print >>sys.stderr, "# CALLBACK: appendDefclassLine"
-               self.defclass.append(self.fsm.current_input)
-
-       def makeCommentBlock(self):
-               """Indents the current comment block with respect to the current
-               indentation level.
-
-               @returns a list of indented comment lines
-               """
-               doxyStart = "##"
-               commentLines = self.comment
-
-               commentLines = map(lambda x: "%s# %s" % (self.indent, x), 
commentLines)
-               l = [self.indent + doxyStart]
-               l.extend(commentLines)
-
-               return l
-
-       def parse(self, input):
-               """Parses a python file given as input string and returns the 
doxygen-
-               compatible representation.
-
-               @param  input   the python code to parse
-               @returns the modified python code
-               """
-               lines = input.split("\n")
-
-               for line in lines:
-                       self.fsm.makeTransition(line)
-
-               if self.fsm.current_state == "DEFCLASS":
-                       self.__closeComment()
-
-               return "\n".join(self.output)
-
-       def parseFile(self, filename):
-               """Parses a python file given as input string and returns the 
doxygen-
-               compatible representation.
-
-               @param  input   the python code to parse
-               @returns the modified python code
-               """
-               f = open(filename, 'r')
-
-               for line in f:
-                       self.parseLine(line.rstrip('\r\n'))
-               if self.fsm.current_state == "DEFCLASS":
-                       self.__closeComment()
-                       self.__flushBuffer()
-               f.close()
-
-       def parseLine(self, line):
-               """Parse one line of python and flush the resulting output to 
the
-               outstream.
-
-               @param  line    the python code line to parse
-               """
-               self.fsm.makeTransition(line)
-               self.__flushBuffer()
+    def __init__(self):
+        string_prefixes = "[uU]?[rR]?"
+
+        self.start_single_comment_re = re.compile("^\s*%s(''')" % 
string_prefixes)
+        self.end_single_comment_re = re.compile("(''')\s*$")
+
+        self.start_double_comment_re = re.compile("^\s*%s(\"\"\")" % 
string_prefixes)
+        self.end_double_comment_re = re.compile("(\"\"\")\s*$")
+
+        self.single_comment_re = re.compile("^\s*%s(''').*(''')\s*$" % 
string_prefixes)
+        self.double_comment_re = re.compile("^\s*%s(\"\"\").*(\"\"\")\s*$" % 
string_prefixes)
+
+        self.defclass_re = re.compile("^(\s*)(def .+:|class .+:)")
+        self.empty_re = re.compile("^\s*$")
+        self.hashline_re = re.compile("^\s*#.*$")
+        self.importline_re = re.compile("^\s*(import |from .+ import)")
+
+        self.multiline_defclass_start_re = 
re.compile("^(\s*)(def|class)(\s.*)?$")
+        self.multiline_defclass_end_re = re.compile(":\s*$")
+
+        ## Transition list format
+        #  ["FROM", "TO", condition, action]
+        transitions = [
+            ### FILEHEAD
+
+            # single line comments
+            ["FILEHEAD", "FILEHEAD", self.single_comment_re.search, 
self.appendCommentLine],
+            ["FILEHEAD", "FILEHEAD", self.double_comment_re.search, 
self.appendCommentLine],
+
+            # multiline comments
+            ["FILEHEAD", "FILEHEAD_COMMENT_SINGLE", 
self.start_single_comment_re.search, self.appendCommentLine],
+            ["FILEHEAD_COMMENT_SINGLE", "FILEHEAD", 
self.end_single_comment_re.search, self.appendCommentLine],
+            ["FILEHEAD_COMMENT_SINGLE", "FILEHEAD_COMMENT_SINGLE", 
self.catchall, self.appendCommentLine],
+            ["FILEHEAD", "FILEHEAD_COMMENT_DOUBLE", 
self.start_double_comment_re.search, self.appendCommentLine],
+            ["FILEHEAD_COMMENT_DOUBLE", "FILEHEAD", 
self.end_double_comment_re.search, self.appendCommentLine],
+            ["FILEHEAD_COMMENT_DOUBLE", "FILEHEAD_COMMENT_DOUBLE", 
self.catchall, self.appendCommentLine],
+
+            # other lines
+            ["FILEHEAD", "FILEHEAD", self.empty_re.search, 
self.appendFileheadLine],
+            ["FILEHEAD", "FILEHEAD", self.hashline_re.search, 
self.appendFileheadLine],
+            ["FILEHEAD", "FILEHEAD", self.importline_re.search, 
self.appendFileheadLine],
+            ["FILEHEAD", "DEFCLASS", self.defclass_re.search, 
self.resetCommentSearch],
+            ["FILEHEAD", "DEFCLASS_MULTI", 
self.multiline_defclass_start_re.search, self.resetCommentSearch],
+            ["FILEHEAD", "DEFCLASS_BODY", self.catchall, 
self.appendFileheadLine],
+
+            ### DEFCLASS
+
+            # single line comments
+            ["DEFCLASS", "DEFCLASS_BODY", self.single_comment_re.search, 
self.appendCommentLine],
+            ["DEFCLASS", "DEFCLASS_BODY", self.double_comment_re.search, 
self.appendCommentLine],
+
+            # multiline comments
+            ["DEFCLASS", "COMMENT_SINGLE", 
self.start_single_comment_re.search, self.appendCommentLine],
+            ["COMMENT_SINGLE", "DEFCLASS_BODY", 
self.end_single_comment_re.search, self.appendCommentLine],
+            ["COMMENT_SINGLE", "COMMENT_SINGLE", self.catchall, 
self.appendCommentLine],
+            ["DEFCLASS", "COMMENT_DOUBLE", 
self.start_double_comment_re.search, self.appendCommentLine],
+            ["COMMENT_DOUBLE", "DEFCLASS_BODY", 
self.end_double_comment_re.search, self.appendCommentLine],
+            ["COMMENT_DOUBLE", "COMMENT_DOUBLE", self.catchall, 
self.appendCommentLine],
+
+            # other lines
+            ["DEFCLASS", "DEFCLASS", self.empty_re.search, 
self.appendDefclassLine],
+            ["DEFCLASS", "DEFCLASS", self.defclass_re.search, 
self.resetCommentSearch],
+            ["DEFCLASS", "DEFCLASS_MULTI", 
self.multiline_defclass_start_re.search, self.resetCommentSearch],
+            ["DEFCLASS", "DEFCLASS_BODY", self.catchall, 
self.stopCommentSearch],
+
+            ### DEFCLASS_BODY
+
+            ["DEFCLASS_BODY", "DEFCLASS", self.defclass_re.search, 
self.startCommentSearch],
+            ["DEFCLASS_BODY", "DEFCLASS_MULTI", 
self.multiline_defclass_start_re.search, self.startCommentSearch],
+            ["DEFCLASS_BODY", "DEFCLASS_BODY", self.catchall, 
self.appendNormalLine],
+
+            ### DEFCLASS_MULTI
+            ["DEFCLASS_MULTI", "DEFCLASS", 
self.multiline_defclass_end_re.search, self.appendDefclassLine],
+            ["DEFCLASS_MULTI", "DEFCLASS_MULTI", self.catchall, 
self.appendDefclassLine],
+        ]
+
+        self.fsm = FSM("FILEHEAD", transitions)
+        self.outstream = sys.stdout
+
+        self.output = []
+        self.comment = []
+        self.filehead = []
+        self.defclass = []
+        self.indent = ""
+
+    def __closeComment(self):
+        """Appends any open comment block and triggering block to the 
output."""
+
+        if args.autobrief:
+            if len(self.comment) == 1 \
+            or (len(self.comment) > 2 and self.comment[1].strip() == ''):
+                self.comment[0] = 
self.__docstringSummaryToBrief(self.comment[0])
+
+        if self.comment:
+            block = self.makeCommentBlock()
+            self.output.extend(block)
+
+        if self.defclass:
+            self.output.extend(self.defclass)
+
+    def __docstringSummaryToBrief(self, line):
+        """Adds \\brief to the docstrings summary line.
+
+        A \\brief is prepended, provided no other doxygen command is at the
+        start of the line.
+        """
+        stripped = line.strip()
+        if stripped and not stripped[0] in ('@', '\\'):
+            return "\\brief " + line
+        else:
+            return line
+
+    def __flushBuffer(self):
+        """Flushes the current outputbuffer to the outstream."""
+        if self.output:
+            try:
+                if args.debug:
+                    print("# OUTPUT: ", self.output, file=sys.stderr)
+                print("\n".join(self.output), file=self.outstream)
+                self.outstream.flush()
+            except IOError:
+                # Fix for FS#33. Catches "broken pipe" when doxygen closes
+                # stdout prematurely upon usage of INPUT_FILTER, INLINE_SOURCES
+                # and FILTER_SOURCE_FILES.
+                pass
+        self.output = []
+
+    def catchall(self, input):
+        """The catchall-condition, always returns true."""
+        return True
+
+    def resetCommentSearch(self, match):
+        """Restarts a new comment search for a different triggering line.
+
+        Closes the current commentblock and starts a new comment search.
+        """
+        if args.debug:
+            print("# CALLBACK: resetCommentSearch", file=sys.stderr)
+        self.__closeComment()
+        self.startCommentSearch(match)
+
+    def startCommentSearch(self, match):
+        """Starts a new comment search.
+
+        Saves the triggering line, resets the current comment and saves
+        the current indentation.
+        """
+        if args.debug:
+            print("# CALLBACK: startCommentSearch", file=sys.stderr)
+        self.defclass = [self.fsm.current_input]
+        self.comment = []
+        self.indent = match.group(1)
+
+    def stopCommentSearch(self, match):
+        """Stops a comment search.
+
+        Closes the current commentblock, resets    the triggering line and
+        appends the current line to the output.
+        """
+        if args.debug:
+            print("# CALLBACK: stopCommentSearch", file=sys.stderr)
+        self.__closeComment()
+
+        self.defclass = []
+        self.output.append(self.fsm.current_input)
+
+    def appendFileheadLine(self, match):
+        """Appends a line in the FILEHEAD state.
+
+        Closes the open comment    block, resets it and appends the current 
line.
+        """
+        if args.debug:
+            print("# CALLBACK: appendFileheadLine", file=sys.stderr)
+        self.__closeComment()
+        self.comment = []
+        self.output.append(self.fsm.current_input)
+
+    def appendCommentLine(self, match):
+        """Appends a comment line.
+
+        The comment delimiter is removed from multiline start and ends as
+        well as singleline comments.
+        """
+        if args.debug:
+            print("# CALLBACK: appendCommentLine", file=sys.stderr)
+        (from_state, to_state, condition, callback) = 
self.fsm.current_transition
+
+        # single line comment
+        if (from_state == "DEFCLASS" and to_state == "DEFCLASS_BODY") \
+        or (from_state == "FILEHEAD" and to_state == "FILEHEAD"):
+            # remove comment delimiter from begin and end of the line
+            activeCommentDelim = match.group(1)
+            line = self.fsm.current_input
+            
self.comment.append(line[line.find(activeCommentDelim)+len(activeCommentDelim):line.rfind(activeCommentDelim)])
+
+            if (to_state == "DEFCLASS_BODY"):
+                self.__closeComment()
+                self.defclass = []
+        # multiline start
+        elif from_state == "DEFCLASS" or from_state == "FILEHEAD":
+            # remove comment delimiter from begin of the line
+            activeCommentDelim = match.group(1)
+            line = self.fsm.current_input
+            
self.comment.append(line[line.find(activeCommentDelim)+len(activeCommentDelim):])
+        # multiline end
+        elif to_state == "DEFCLASS_BODY" or to_state == "FILEHEAD":
+            # remove comment delimiter from end of the line
+            activeCommentDelim = match.group(1)
+            line = self.fsm.current_input
+            self.comment.append(line[0:line.rfind(activeCommentDelim)])
+            if (to_state == "DEFCLASS_BODY"):
+                self.__closeComment()
+                self.defclass = []
+        # in multiline comment
+        else:
+            # just append the comment line
+            self.comment.append(self.fsm.current_input)
+
+    def appendNormalLine(self, match):
+        """Appends a line to the output."""
+        if args.debug:
+            print("# CALLBACK: appendNormalLine", file=sys.stderr)
+        self.output.append(self.fsm.current_input)
+
+    def appendDefclassLine(self, match):
+        """Appends a line to the triggering block."""
+        if args.debug:
+            print("# CALLBACK: appendDefclassLine", file=sys.stderr)
+        self.defclass.append(self.fsm.current_input)
+
+    def makeCommentBlock(self):
+        """Indents the current comment block with respect to the current
+        indentation level.
+
+        @returns a list of indented comment lines
+        """
+        doxyStart = "##"
+        commentLines = self.comment
+
+        commentLines = map(lambda x: "%s# %s" % (self.indent, x), commentLines)
+        l = [self.indent + doxyStart]
+        l.extend(commentLines)
+
+        return l
+
+    def parse(self, input):
+        """Parses a python file given as input string and returns the doxygen-
+        compatible representation.
+
+        @param    input    the python code to parse
+        @returns the modified python code
+        """
+        lines = input.split("\n")
+
+        for line in lines:
+            self.fsm.makeTransition(line)
+
+        if self.fsm.current_state == "DEFCLASS":
+            self.__closeComment()
+
+        return "\n".join(self.output)
+
+    def parseFile(self, filename):
+        """Parses a python file given as input string and returns the doxygen-
+        compatible representation.
+
+        @param    input    the python code to parse
+        @returns the modified python code
+        """
+        f = open(filename, 'r')
+
+        for line in f:
+            self.parseLine(line.rstrip('\r\n'))
+        if self.fsm.current_state == "DEFCLASS":
+            self.__closeComment()
+            self.__flushBuffer()
+        f.close()
+
+    def parseLine(self, line):
+        """Parse one line of python and flush the resulting output to the
+        outstream.
+
+        @param    line    the python code line to parse
+        """
+        self.fsm.makeTransition(line)
+        self.__flushBuffer()
 
 def argParse():
-       """Parses commandline args."""
-       parser = ArgumentParser(prog=__applicationName__)
-
-       parser.add_argument("--version", action="version",
-               version="%(prog)s " + __version__
-       )
-       parser.add_argument("--autobrief", action="store_true",
-               help="use the docstring summary line as \\brief description"
-       )
-       parser.add_argument("--debug", action="store_true",
-               help="enable debug output on stderr"
-       )
-       parser.add_argument("filename", metavar="FILENAME")
-
-       return parser.parse_args()
+    """Parses commandline args."""
+    parser = ArgumentParser(prog=__applicationName__)
+
+    parser.add_argument("--version", action="version",
+        version="%(prog)s " + __version__
+    )
+    parser.add_argument("--autobrief", action="store_true",
+        help="use the docstring summary line as \\brief description"
+    )
+    parser.add_argument("--debug", action="store_true",
+        help="enable debug output on stderr"
+    )
+    parser.add_argument("filename", metavar="FILENAME")
+
+    return parser.parse_args()
 
 def main():
-       """Starts the parser on the file given by the filename as the first
-       argument on the commandline.
-       """
-       global args
-       args = argParse()
-       fsm = Doxypy()
-       fsm.parseFile(args.filename)
+    """Starts the parser on the file given by the filename as the first
+    argument on the commandline.
+    """
+    global args
+    args = argParse()
+    fsm = Doxypy()
+    fsm.parseFile(args.filename)
 
 if __name__ == "__main__":
-       main()
+    main()
diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py
index c9e89ae..96c303a 100644
--- a/docs/doxygen/swig_doc.py
+++ b/docs/doxygen/swig_doc.py
@@ -84,8 +84,8 @@ def utoascii(text):
     if text is None:
         return ''
     out = text.encode('ascii', 'replace')
-    out = out.replace('"', '\\"')
-    return out
+    out = out.replace(b'"', b'\\"').decode('ascii')
+    return str(out)
 
 
 def combine_descriptions(obj):
@@ -301,7 +301,7 @@ def make_swig_interface_file(di, swigdocfilename, 
custom_output=None):
 
     output = "\n\n".join(output)
 
-    swig_doc = file(swigdocfilename, 'w')
+    swig_doc = open(swigdocfilename, 'w')
     swig_doc.write(output)
     swig_doc.close()
 
@@ -309,7 +309,7 @@ if __name__ == "__main__":
     # Parse command line options and set up doxyxml.
     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"
     if len(sys.argv) != 3:
-        raise StandardError(err_msg)
+        raise Exception(err_msg)
     xml_path = sys.argv[1]
     swigdocfilename = sys.argv[2]
     di = DoxyIndex(xml_path)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]