Esempio n. 1
0
 def __init__(self, project, parms=None, parent=None):
     """
     Constructor
     
     @param project reference to the project object (Project.Project)
     @param parms parameters to set in the dialog
     @param parent parent widget of this dialog
     """
     super(EricdocConfigDialog, self).__init__(parent)
     self.setupUi(self)
     
     self.outputDirPicker.setMode(E5PathPickerModes.DirectoryMode)
     self.outputDirPicker.setDefaultDirectory(project.getProjectPath())
     
     self.ignoreDirPicker.setMode(E5PathPickerModes.DirectoryMode)
     self.ignoreDirPicker.setDefaultDirectory(project.getProjectPath())
     
     self.cssPicker.setMode(E5PathPickerModes.OpenFileMode)
     self.cssPicker.setDefaultDirectory(getConfig('ericCSSDir'))
     self.cssPicker.setFilters(self.tr(
         "Style sheet (*.css);;All files (*)"))
     
     self.qtHelpDirPicker.setMode(E5PathPickerModes.DirectoryMode)
     self.qtHelpDirPicker.setDefaultDirectory(project.getProjectPath())
     
     self.__okButton = self.buttonBox.button(QDialogButtonBox.Ok)
     
     self.__initializeDefaults()
     
     self.sampleText = self.tr(
         '''<?xml version="1.0" encoding="utf-8"?>'''
         '''<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"'''
         '''"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'''
         '''<html><head>'''
         '''<title></title>'''
         '''</head>'''
         '''<body style="background-color:{BodyBgColor};'''
         '''color:{BodyColor}">'''
         '''<h1 style="background-color:{Level1HeaderBgColor};'''
         '''color:{Level1HeaderColor}">'''
         '''Level 1 Header</h1>'''
         '''<h3 style="background-color:{Level2HeaderBgColor};'''
         '''color:{Level2HeaderColor}">'''
         '''Level 2 Header</h3>'''
         '''<h2 style="background-color:{CFBgColor};color:{CFColor}">'''
         '''Class and Function Header</h2>'''
         '''Standard body text with '''
         '''<a style="color:{LinkColor}">some links</a> embedded.'''
         '''</body></html>'''
     )
     
     # get a copy of the defaults to store the user settings
     self.parameters = copy.deepcopy(self.defaults)
     self.colors = eric6docDefaultColors.copy()
     
     # combine it with the values of parms
     if parms is not None:
         for key, value in list(parms.items()):
             if key.endswith("Color"):
                 self.colors[key] = parms[key]
             else:
                 self.parameters[key] = parms[key]
     self.parameters['outputDirectory'] = \
         Utilities.toNativeSeparators(self.parameters['outputDirectory'])
     self.parameters['qtHelpOutputDirectory'] = \
         Utilities.toNativeSeparators(
             self.parameters['qtHelpOutputDirectory'])
     self.parameters['cssFile'] = \
         Utilities.toNativeSeparators(self.parameters['cssFile'])
     if self.parameters['cssFile'].startswith("%PYTHON%"):
         self.parameters['cssFile'] = self.parameters['cssFile'].replace(
             "%PYTHON%", Utilities.getPythonModulesDirectory())
     
     self.ppath = project.getProjectPath()
     self.project = project
     
     self.recursionCheckBox.setChecked(self.parameters['useRecursion'])
     self.noindexCheckBox.setChecked(self.parameters['noindex'])
     self.noemptyCheckBox.setChecked(self.parameters['noempty'])
     self.outputDirPicker.setText(self.parameters['outputDirectory'])
     self.ignoreDirsList.clear()
     for d in self.parameters['ignoreDirectories']:
         self.ignoreDirsList.addItem(d)
     self.cssPicker.setText(self.parameters['cssFile'])
     self.sourceExtEdit.setText(
         ", ".join(self.parameters['sourceExtensions']))
     self.excludeFilesEdit.setText(
         ", ".join(self.parameters['ignoreFilePatterns']))
     self.sample.setHtml(self.sampleText.format(**self.colors))
     
     self.qtHelpGroup.setChecked(self.parameters['qtHelpEnabled'])
     self.qtHelpDirPicker.setText(self.parameters['qtHelpOutputDirectory'])
     self.qtHelpNamespaceEdit.setText(self.parameters['qtHelpNamespace'])
     self.qtHelpFolderEdit.setText(self.parameters['qtHelpVirtualFolder'])
     self.qtHelpFilterNameEdit.setText(self.parameters['qtHelpFilterName'])
     self.qtHelpFilterAttributesEdit.setText(
         self.parameters['qtHelpFilterAttributes'])
     self.qtHelpTitleEdit.setText(self.parameters['qtHelpTitle'])
     self.qtHelpGenerateCollectionCheckBox.setChecked(
         self.parameters['qtHelpCreateCollection'])
Esempio n. 2
0
def main():
    """
    Main entry point into the application.
    """
    import getopt

    try:
        opts, args = getopt.getopt(sys.argv[1:], "c:ehio:Rrt:Vx:", [
            "exclude=",
            "extension=",
            "help",
            "noindex",
            "noempty",
            "outdir=",
            "recursive",
            "style-sheet=",
            "version",
            "exclude-file=",
            "eol=",
            "body-color=",
            "body-background-color=",
            "l1header-color=",
            "l1header-background-color=",
            "l2header-color=",
            "l2header-background-color=",
            "cfheader-color=",
            "cfheader-background-color=",
            "link-color=",
            "create-qhp",
            "qhp-outdir=",
            "qhp-namespace=",
            "qhp-virtualfolder=",
            "qhp-filtername=",
            "qhp-filterattribs=",
            "qhp-title=",
            "create-qhc",
        ])
    except getopt.error:
        usage()

    excludeDirs = [
        "CVS", ".svn", "_svn", ".ropeproject", "_ropeproject", ".eric6project",
        "_eric6project", "dist", "build", "doc", "docs"
    ]
    excludePatterns = []
    outputDir = "doc"
    recursive = False
    doIndex = True
    noempty = False
    newline = None

    stylesheetFile = ""
    colors = eric6docDefaultColors.copy()

    qtHelpCreation = False
    qtHelpOutputDir = "help"
    qtHelpNamespace = ""
    qtHelpFolder = "source"
    qtHelpFilterName = "unknown"
    qtHelpFilterAttribs = ""
    qtHelpTitle = ""
    qtHelpCreateCollection = False

    for k, v in opts:
        if k in ["-o", "--outdir"]:
            outputDir = v
        elif k in ["-R", "-r", "--recursive"]:
            recursive = True
        elif k in ["-x", "--exclude"]:
            excludeDirs.append(v)
        elif k == "--exclude-file":
            excludePatterns.append(v)
        elif k in ["-i", "--noindex"]:
            doIndex = False
        elif k in ["-e", "--noempty"]:
            noempty = True
        elif k in ["-h", "--help"]:
            usage()
        elif k in ["-V", "--version"]:
            version()
        elif k in ["-c", "--style-sheet"]:
            stylesheetFile = v
        elif k in ["-t", "--extension"]:
            if not v.startswith("."):
                v = ".{0}".format(v)
            supportedExtensions.append(v)
        elif k == "--eol":
            if v.lower() == "cr":
                newline = '\r'
            elif v.lower() == "lf":
                newline = '\n'
            elif v.lower() == "crlf":
                newline = '\r\n'

        elif k == "--body-color":
            colors['BodyColor'] = v
        elif k == "--body-background-color":
            colors['BodyBgColor'] = v
        elif k == "--l1header-color":
            colors['Level1HeaderColor'] = v
        elif k == "--l1header-background-color":
            colors['Level1HeaderBgColor'] = v
        elif k == "--l2header-color":
            colors['Level2HeaderColor'] = v
        elif k == "--l2header-background-color":
            colors['Level2HeaderBgColor'] = v
        elif k == "--cfheader-color":
            colors['CFColor'] = v
        elif k == "--cfheader-background-color":
            colors['CFBgColor'] = v
        elif k == "--link-color":
            colors['LinkColor'] = v

        elif k == "--create-qhp":
            qtHelpCreation = True
        elif k == "--qhp-outdir":
            qtHelpOutputDir = v
        elif k == "--qhp-namespace":
            qtHelpNamespace = v
        elif k == "--qhp-virtualfolder":
            qtHelpFolder = v
        elif k == "--qhp-filtername":
            qtHelpFilterName = v
        elif k == "--qhp-filterattribs":
            qtHelpFilterAttribs = v
        elif k == "--qhp-title":
            qtHelpTitle = v
        elif k == "--create-qhc":
            qtHelpCreateCollection = True

    if not args:
        usage()

    if qtHelpCreation and \
       (qtHelpNamespace == "" or
        qtHelpFolder == "" or '/' in qtHelpFolder or
            qtHelpTitle == ""):
        usage()

    if qtHelpCreation:
        from PyQt5.QtCore import QCoreApplication
        app = QCoreApplication(sys.argv)  # __IGNORE_WARNING__

    input = output = 0
    basename = ""

    if outputDir:
        if not os.path.isdir(outputDir):
            try:
                os.makedirs(outputDir)
            except EnvironmentError:
                sys.stderr.write(
                    "Could not create output directory {0}.".format(outputDir))
                sys.exit(2)
    else:
        outputDir = os.getcwd()
    outputDir = os.path.abspath(outputDir)

    if stylesheetFile:
        try:
            sf = open(stylesheetFile, "r", encoding="utf-8")
            stylesheet = sf.read()
            sf.close()
        except IOError:
            sys.stderr.write(
                "The CSS stylesheet '{0}' does not exist\n".format(
                    stylesheetFile))
            sys.stderr.write("Disabling CSS usage.\n")
            stylesheet = None
    else:
        stylesheet = None

    indexGenerator = IndexGenerator(outputDir, colors, stylesheet)

    if qtHelpCreation:
        if qtHelpOutputDir:
            if not os.path.isdir(qtHelpOutputDir):
                try:
                    os.makedirs(qtHelpOutputDir)
                except EnvironmentError:
                    sys.stderr.write(
                        "Could not create QtHelp output directory {0}.".format(
                            qtHelpOutputDir))
                    sys.exit(2)
        else:
            qtHelpOutputDir = os.getcwd()
        qtHelpOutputDir = os.path.abspath(qtHelpOutputDir)

        qtHelpGenerator = QtHelpGenerator(outputDir, qtHelpOutputDir,
                                          qtHelpNamespace, qtHelpFolder,
                                          qtHelpFilterName,
                                          qtHelpFilterAttribs, qtHelpTitle,
                                          qtHelpCreateCollection)

    for arg in args:
        if os.path.isdir(arg):
            if os.path.exists(
                    os.path.join(arg, Utilities.joinext("__init__", ".py"))):
                basename = os.path.dirname(arg)
                if arg == '.':
                    sys.stderr.write("The directory '.' is a package.\n")
                    sys.stderr.write(
                        "Please repeat the call giving its real name.\n")
                    sys.stderr.write("Ignoring the directory.\n")
                    continue
            else:
                basename = arg
            if basename:
                basename = "{0}{1}".format(basename, os.sep)

            if recursive and not os.path.islink(arg):
                names = [arg] + Utilities.getDirs(arg, excludeDirs)
            else:
                names = [arg]
        else:
            basename = ""
            names = [arg]

        for filename in names:
            inpackage = False
            if os.path.isdir(filename):
                files = []
                for ext in supportedExtensions:
                    files.extend(
                        glob.glob(
                            os.path.join(filename, Utilities.joinext("*",
                                                                     ext))))
                    initFile = os.path.join(filename,
                                            Utilities.joinext("__init__", ext))
                    if initFile in files:
                        inpackage = True
                        files.remove(initFile)
                        files.insert(0, initFile)
            else:
                if Utilities.isWindowsPlatform() and glob.has_magic(filename):
                    files = glob.glob(filename)
                else:
                    files = [filename]

            for file in files:
                skipIt = False
                for pattern in excludePatterns:
                    if fnmatch.fnmatch(os.path.basename(file), pattern):
                        skipIt = True
                        break
                if skipIt:
                    continue

                try:
                    module = Utilities.ModuleParser.readModule(
                        file,
                        basename=basename,
                        inpackage=inpackage,
                        extensions=supportedExtensions)
                    moduleDocument = ModuleDocument(module, colors, stylesheet)
                    doc = moduleDocument.genDocument()
                except IOError as v:
                    sys.stderr.write("{0} error: {1}\n".format(file, v[1]))
                    continue
                except ImportError as v:
                    sys.stderr.write("{0} error: {1}\n".format(file, v))
                    continue

                input = input + 1

                f = Utilities.joinext(
                    os.path.join(outputDir, moduleDocument.name()), ".html")

                # remember for index file generation
                indexGenerator.remember(file, moduleDocument, basename)

                # remember for QtHelp generation
                if qtHelpCreation:
                    qtHelpGenerator.remember(file, moduleDocument, basename)

                if (noempty or file.endswith('__init__.py')) \
                   and moduleDocument.isEmpty():
                    continue

                # generate output
                try:
                    out = open(f, "w", encoding="utf-8", newline=newline)
                    out.write(doc)
                    out.close()
                except IOError as v:
                    sys.stderr.write("{0} error: {1}\n".format(file, v[1]))
                else:
                    sys.stdout.write("{0} ok\n".format(f))

                output = output + 1
    sys.stdout.flush()
    sys.stderr.flush()

    # write index files
    if doIndex:
        indexGenerator.writeIndices(basename, newline=newline)

    # generate the QtHelp files
    if qtHelpCreation:
        qtHelpGenerator.generateFiles(newline=newline)

    sys.exit(0)
    def __init__(self, project, parms=None, parent=None):
        """
        Constructor
        
        @param project reference to the project object (Project.Project)
        @param parms parameters to set in the dialog
        @param parent parent widget of this dialog
        """
        super(EricdocConfigDialog, self).__init__(parent)
        self.setupUi(self)

        self.outputDirButton.setIcon(UI.PixmapCache.getIcon("open.png"))
        self.ignoreDirButton.setIcon(UI.PixmapCache.getIcon("open.png"))
        self.cssButton.setIcon(UI.PixmapCache.getIcon("open.png"))
        self.qtHelpDirButton.setIcon(UI.PixmapCache.getIcon("open.png"))

        self.__okButton = self.buttonBox.button(QDialogButtonBox.Ok)

        self.__initializeDefaults()

        self.sampleText = self.tr(
            '''<?xml version="1.0" encoding="utf-8"?>'''
            '''<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"'''
            '''"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'''
            '''<html><head>'''
            '''<title></title>'''
            '''</head>'''
            '''<body style="background-color:{BodyBgColor};'''
            '''color:{BodyColor}">'''
            '''<h1 style="background-color:{Level1HeaderBgColor};'''
            '''color:{Level1HeaderColor}">'''
            '''Level 1 Header</h1>'''
            '''<h3 style="background-color:{Level2HeaderBgColor};'''
            '''color:{Level2HeaderColor}">'''
            '''Level 2 Header</h3>'''
            '''<h2 style="background-color:{CFBgColor};color:{CFColor}">'''
            '''Class and Function Header</h2>'''
            '''Standard body text with '''
            '''<a style="color:{LinkColor}">some links</a> embedded.'''
            '''</body></html>''')

        # get a copy of the defaults to store the user settings
        self.parameters = copy.deepcopy(self.defaults)
        self.colors = eric6docDefaultColors.copy()

        # combine it with the values of parms
        if parms is not None:
            for key, value in list(parms.items()):
                if key.endswith("Color"):
                    self.colors[key] = parms[key]
                else:
                    self.parameters[key] = parms[key]
        self.parameters['outputDirectory'] = \
            Utilities.toNativeSeparators(self.parameters['outputDirectory'])
        self.parameters['qtHelpOutputDirectory'] = \
            Utilities.toNativeSeparators(
                self.parameters['qtHelpOutputDirectory'])
        self.parameters['cssFile'] = \
            Utilities.toNativeSeparators(self.parameters['cssFile'])
        if self.parameters['cssFile'].startswith("%PYTHON%"):
            self.parameters['cssFile'] = self.parameters['cssFile'].replace(
                "%PYTHON%", Utilities.getPythonModulesDirectory())

        self.ppath = project.getProjectPath()
        self.project = project

        self.outputDirCompleter = E5DirCompleter(self.outputDirEdit)
        self.ignoreDirCompleter = E5DirCompleter(self.ignoreDirEdit)
        self.qtHelpDirCompleter = E5DirCompleter(self.qtHelpDirEdit)

        self.recursionCheckBox.setChecked(self.parameters['useRecursion'])
        self.noindexCheckBox.setChecked(self.parameters['noindex'])
        self.noemptyCheckBox.setChecked(self.parameters['noempty'])
        self.outputDirEdit.setText(self.parameters['outputDirectory'])
        self.ignoreDirsList.clear()
        for d in self.parameters['ignoreDirectories']:
            self.ignoreDirsList.addItem(d)
        self.cssEdit.setText(self.parameters['cssFile'])
        self.sourceExtEdit.setText(", ".join(
            self.parameters['sourceExtensions']))
        self.excludeFilesEdit.setText(", ".join(
            self.parameters['ignoreFilePatterns']))
        self.sample.setHtml(self.sampleText.format(**self.colors))

        self.qtHelpGroup.setChecked(self.parameters['qtHelpEnabled'])
        self.qtHelpDirEdit.setText(self.parameters['qtHelpOutputDirectory'])
        self.qtHelpNamespaceEdit.setText(self.parameters['qtHelpNamespace'])
        self.qtHelpFolderEdit.setText(self.parameters['qtHelpVirtualFolder'])
        self.qtHelpFilterNameEdit.setText(self.parameters['qtHelpFilterName'])
        self.qtHelpFilterAttributesEdit.setText(
            self.parameters['qtHelpFilterAttributes'])
        self.qtHelpTitleEdit.setText(self.parameters['qtHelpTitle'])
        self.qtHelpGenerateCollectionCheckBox.setChecked(
            self.parameters['qtHelpCreateCollection'])
Esempio n. 4
0
    def __init__(self, project, parms=None, parent=None):
        """
        Constructor
        
        @param project reference to the project object (Project.Project)
        @param parms parameters to set in the dialog
        @param parent parent widget of this dialog
        """
        super(EricdocConfigDialog, self).__init__(parent)
        self.setupUi(self)

        self.outputDirButton.setIcon(UI.PixmapCache.getIcon("open.png"))
        self.ignoreDirButton.setIcon(UI.PixmapCache.getIcon("open.png"))
        self.cssButton.setIcon(UI.PixmapCache.getIcon("open.png"))
        self.qtHelpDirButton.setIcon(UI.PixmapCache.getIcon("open.png"))

        self.__okButton = self.buttonBox.button(QDialogButtonBox.Ok)

        self.__initializeDefaults()

        self.sampleText = self.tr(
            """<?xml version="1.0" encoding="utf-8"?>"""
            '''<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"'''
            """"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">"""
            """<html><head>"""
            """<title></title>"""
            """</head>"""
            """<body style="background-color:{BodyBgColor};"""
            """color:{BodyColor}">"""
            """<h1 style="background-color:{Level1HeaderBgColor};"""
            """color:{Level1HeaderColor}">"""
            """Level 1 Header</h1>"""
            """<h3 style="background-color:{Level2HeaderBgColor};"""
            """color:{Level2HeaderColor}">"""
            """Level 2 Header</h3>"""
            """<h2 style="background-color:{CFBgColor};color:{CFColor}">"""
            """Class and Function Header</h2>"""
            """Standard body text with """
            """<a style="color:{LinkColor}">some links</a> embedded."""
            """</body></html>"""
        )

        # get a copy of the defaults to store the user settings
        self.parameters = copy.deepcopy(self.defaults)
        self.colors = eric6docDefaultColors.copy()

        # combine it with the values of parms
        if parms is not None:
            for key, value in list(parms.items()):
                if key.endswith("Color"):
                    self.colors[key] = parms[key]
                else:
                    self.parameters[key] = parms[key]
        self.parameters["outputDirectory"] = Utilities.toNativeSeparators(self.parameters["outputDirectory"])
        self.parameters["qtHelpOutputDirectory"] = Utilities.toNativeSeparators(
            self.parameters["qtHelpOutputDirectory"]
        )
        self.parameters["cssFile"] = Utilities.toNativeSeparators(self.parameters["cssFile"])
        if self.parameters["cssFile"].startswith("%PYTHON%"):
            self.parameters["cssFile"] = self.parameters["cssFile"].replace(
                "%PYTHON%", Utilities.getPythonModulesDirectory()
            )

        self.ppath = project.getProjectPath()
        self.project = project

        self.outputDirCompleter = E5DirCompleter(self.outputDirEdit)
        self.ignoreDirCompleter = E5DirCompleter(self.ignoreDirEdit)
        self.qtHelpDirCompleter = E5DirCompleter(self.qtHelpDirEdit)

        self.recursionCheckBox.setChecked(self.parameters["useRecursion"])
        self.noindexCheckBox.setChecked(self.parameters["noindex"])
        self.noemptyCheckBox.setChecked(self.parameters["noempty"])
        self.outputDirEdit.setText(self.parameters["outputDirectory"])
        self.ignoreDirsList.clear()
        for d in self.parameters["ignoreDirectories"]:
            self.ignoreDirsList.addItem(d)
        self.cssEdit.setText(self.parameters["cssFile"])
        self.sourceExtEdit.setText(", ".join(self.parameters["sourceExtensions"]))
        self.excludeFilesEdit.setText(", ".join(self.parameters["ignoreFilePatterns"]))
        self.sample.setHtml(self.sampleText.format(**self.colors))

        self.qtHelpGroup.setChecked(self.parameters["qtHelpEnabled"])
        self.qtHelpDirEdit.setText(self.parameters["qtHelpOutputDirectory"])
        self.qtHelpNamespaceEdit.setText(self.parameters["qtHelpNamespace"])
        self.qtHelpFolderEdit.setText(self.parameters["qtHelpVirtualFolder"])
        self.qtHelpFilterNameEdit.setText(self.parameters["qtHelpFilterName"])
        self.qtHelpFilterAttributesEdit.setText(self.parameters["qtHelpFilterAttributes"])
        self.qtHelpTitleEdit.setText(self.parameters["qtHelpTitle"])
        self.qtHelpGenerateCollectionCheckBox.setChecked(self.parameters["qtHelpCreateCollection"])
Esempio n. 5
0
def main():
    """
    Main entry point into the application.
    """
    import getopt

    try:
        opts, args = getopt.getopt(
            sys.argv[1:], "c:ehio:Rrt:Vx:",
            ["exclude=", "extension=", "help", "noindex", "noempty", "outdir=",
             "recursive", "style-sheet=", "version",
             "exclude-file=", "eol=",
             "body-color=", "body-background-color=",
             "l1header-color=", "l1header-background-color=",
             "l2header-color=", "l2header-background-color=",
             "cfheader-color=", "cfheader-background-color=",
             "link-color=",
             "create-qhp", "qhp-outdir=", "qhp-namespace=",
             "qhp-virtualfolder=", "qhp-filtername=", "qhp-filterattribs=",
             "qhp-title=", "create-qhc",
             ])
    except getopt.error:
        usage()

    excludeDirs = ["CVS", ".svn", "_svn", ".ropeproject", "_ropeproject",
                   ".eric6project", "_eric6project", "dist", "build", "doc",
                   "docs"]
    excludePatterns = []
    outputDir = "doc"
    recursive = False
    doIndex = True
    noempty = False
    newline = None
    
    stylesheetFile = ""
    colors = eric6docDefaultColors.copy()
    
    qtHelpCreation = False
    qtHelpOutputDir = "help"
    qtHelpNamespace = ""
    qtHelpFolder = "source"
    qtHelpFilterName = "unknown"
    qtHelpFilterAttribs = ""
    qtHelpTitle = ""
    qtHelpCreateCollection = False
    
    for k, v in opts:
        if k in ["-o", "--outdir"]:
            outputDir = v
        elif k in ["-R", "-r", "--recursive"]:
            recursive = True
        elif k in ["-x", "--exclude"]:
            excludeDirs.append(v)
        elif k == "--exclude-file":
            excludePatterns.append(v)
        elif k in ["-i", "--noindex"]:
            doIndex = False
        elif k in ["-e", "--noempty"]:
            noempty = True
        elif k in ["-h", "--help"]:
            usage()
        elif k in ["-V", "--version"]:
            version()
        elif k in ["-c", "--style-sheet"]:
            stylesheetFile = v
        elif k in ["-t", "--extension"]:
            if not v.startswith("."):
                v = ".{0}".format(v)
            supportedExtensions.append(v)
        elif k == "--eol":
            if v.lower() == "cr":
                newline = '\r'
            elif v.lower() == "lf":
                newline = '\n'
            elif v.lower() == "crlf":
                newline = '\r\n'
        
        elif k == "--body-color":
            colors['BodyColor'] = v
        elif k == "--body-background-color":
            colors['BodyBgColor'] = v
        elif k == "--l1header-color":
            colors['Level1HeaderColor'] = v
        elif k == "--l1header-background-color":
            colors['Level1HeaderBgColor'] = v
        elif k == "--l2header-color":
            colors['Level2HeaderColor'] = v
        elif k == "--l2header-background-color":
            colors['Level2HeaderBgColor'] = v
        elif k == "--cfheader-color":
            colors['CFColor'] = v
        elif k == "--cfheader-background-color":
            colors['CFBgColor'] = v
        elif k == "--link-color":
            colors['LinkColor'] = v
        
        elif k == "--create-qhp":
            qtHelpCreation = True
        elif k == "--qhp-outdir":
            qtHelpOutputDir = v
        elif k == "--qhp-namespace":
            qtHelpNamespace = v
        elif k == "--qhp-virtualfolder":
            qtHelpFolder = v
        elif k == "--qhp-filtername":
            qtHelpFilterName = v
        elif k == "--qhp-filterattribs":
            qtHelpFilterAttribs = v
        elif k == "--qhp-title":
            qtHelpTitle = v
        elif k == "--create-qhc":
            qtHelpCreateCollection = True

    if not args:
        usage()
    
    if qtHelpCreation and \
       (qtHelpNamespace == "" or
        qtHelpFolder == "" or '/' in qtHelpFolder or
            qtHelpTitle == ""):
        usage()
    
    if qtHelpCreation:
        from PyQt5.QtCore import QCoreApplication
        app = QCoreApplication(sys.argv)    # __IGNORE_WARNING__

    input = output = 0
    basename = ""

    if outputDir:
        if not os.path.isdir(outputDir):
            try:
                os.makedirs(outputDir)
            except EnvironmentError:
                sys.stderr.write(
                    "Could not create output directory {0}.".format(outputDir))
                sys.exit(2)
    else:
        outputDir = os.getcwd()
    outputDir = os.path.abspath(outputDir)

    if stylesheetFile:
        try:
            sf = open(stylesheetFile, "r", encoding="utf-8")
            stylesheet = sf.read()
            sf.close()
        except IOError:
            sys.stderr.write(
                "The CSS stylesheet '{0}' does not exist\n".format(
                    stylesheetFile))
            sys.stderr.write("Disabling CSS usage.\n")
            stylesheet = None
    else:
        stylesheet = None
    
    indexGenerator = IndexGenerator(outputDir, colors, stylesheet)
    
    if qtHelpCreation:
        if qtHelpOutputDir:
            if not os.path.isdir(qtHelpOutputDir):
                try:
                    os.makedirs(qtHelpOutputDir)
                except EnvironmentError:
                    sys.stderr.write(
                        "Could not create QtHelp output directory {0}.".format(
                            qtHelpOutputDir))
                    sys.exit(2)
        else:
            qtHelpOutputDir = os.getcwd()
        qtHelpOutputDir = os.path.abspath(qtHelpOutputDir)
        
        qtHelpGenerator = QtHelpGenerator(outputDir,
                                          qtHelpOutputDir, qtHelpNamespace,
                                          qtHelpFolder, qtHelpFilterName,
                                          qtHelpFilterAttribs, qtHelpTitle,
                                          qtHelpCreateCollection)
    
    for arg in args:
        if os.path.isdir(arg):
            if os.path.exists(os.path.join(
                    arg, Utilities.joinext("__init__", ".py"))):
                basename = os.path.dirname(arg)
                if arg == '.':
                    sys.stderr.write("The directory '.' is a package.\n")
                    sys.stderr.write(
                        "Please repeat the call giving its real name.\n")
                    sys.stderr.write("Ignoring the directory.\n")
                    continue
            else:
                basename = arg
            if basename:
                basename = "{0}{1}".format(basename, os.sep)
            
            if recursive and not os.path.islink(arg):
                names = [arg] + Utilities.getDirs(arg, excludeDirs)
            else:
                names = [arg]
        else:
            basename = ""
            names = [arg]
        
        for filename in names:
            inpackage = False
            if os.path.isdir(filename):
                files = []
                for ext in supportedExtensions:
                    files.extend(glob.glob(os.path.join(
                        filename, Utilities.joinext("*", ext))))
                    initFile = os.path.join(
                        filename, Utilities.joinext("__init__", ext))
                    if initFile in files:
                        inpackage = True
                        files.remove(initFile)
                        files.insert(0, initFile)
            else:
                if Utilities.isWindowsPlatform() and glob.has_magic(filename):
                    files = glob.glob(filename)
                else:
                    files = [filename]
            
            for file in files:
                skipIt = False
                for pattern in excludePatterns:
                    if fnmatch.fnmatch(os.path.basename(file), pattern):
                        skipIt = True
                        break
                if skipIt:
                    continue
                
                try:
                    module = Utilities.ModuleParser.readModule(
                        file, basename=basename,
                        inpackage=inpackage, extensions=supportedExtensions)
                    moduleDocument = ModuleDocument(module, colors, stylesheet)
                    doc = moduleDocument.genDocument()
                except IOError as v:
                    sys.stderr.write("{0} error: {1}\n".format(file, v[1]))
                    continue
                except ImportError as v:
                    sys.stderr.write("{0} error: {1}\n".format(file, v))
                    continue
                
                input = input + 1
                
                f = Utilities.joinext(os.path.join(
                    outputDir, moduleDocument.name()), ".html")
                
                # remember for index file generation
                indexGenerator.remember(file, moduleDocument, basename)
                
                # remember for QtHelp generation
                if qtHelpCreation:
                    qtHelpGenerator.remember(file, moduleDocument, basename)
                
                if (noempty or file.endswith('__init__.py')) \
                   and moduleDocument.isEmpty():
                    continue
                
                # generate output
                try:
                    out = open(f, "w", encoding="utf-8", newline=newline)
                    out.write(doc)
                    out.close()
                except IOError as v:
                    sys.stderr.write("{0} error: {1}\n".format(file, v[1]))
                else:
                    sys.stdout.write("{0} ok\n".format(f))
                
                output = output + 1
    sys.stdout.flush()
    sys.stderr.flush()

    # write index files
    if doIndex:
        indexGenerator.writeIndices(basename, newline=newline)
    
    # generate the QtHelp files
    if qtHelpCreation:
        qtHelpGenerator.generateFiles(newline=newline)

    sys.exit(0)