--- a/eric5-doc.py Sun Feb 20 18:50:59 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,403 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -# Copyright (c) 2003 - 2011 Detlev Offenbach <detlev@die-offenbachs.de> -# - -""" -Eric5 Documentation Generator - -This is the main Python script of the documentation generator. It is -this script that gets called via the source documentation interface. -This script can be used via the commandline as well. -""" - -import glob -import os -import sys -import fnmatch - -import Utilities.ModuleParser -from DocumentationTools.ModuleDocumentor import ModuleDocument -from DocumentationTools.IndexGenerator import IndexGenerator -from DocumentationTools.QtHelpGenerator import QtHelpGenerator -from DocumentationTools.Config import eric5docDefaultColors -from UI.Info import Version -import Utilities - -# list of supported filename extensions -supportedExtensions = [".py", ".pyw", ".ptl", ".rb"] - -def usage(): - """ - Function to print some usage information. - - It prints a reference of all commandline parameters that may - be used and ends the application. - """ - print("eric5-doc") - print() - print("Copyright (c) 2003 - 2011 Detlev Offenbach <detlev@die-offenbachs.de>.") - print() - print("Usage:") - print() - print(" eric5-doc [options] files...") - print() - print("where files can be either python modules, package") - print("directories or ordinary directories.") - print() - print("Options:") - print() - print(" -c filename or --style-sheet=filename") - print(" Specify a CSS style sheet file to be used.") - print(" -e or --noempty") - print(" Don't include empty modules.") - print(" --eol=eol-type") - print(" Use the given eol type to terminate lines.") - print(" Valid values are 'cr', 'lf' and 'crlf'.") - print(" --exclude-file=pattern") - print(" Specify a filename pattern of files to be excluded.") - print(" This option may be repeated multiple times.") - print(" -h or --help") - print(" Show this help and exit.") - print(" -i or --noindex") - print(" Don't generate index files.") - print(" -o directory or --outdir=directory") - print(" Generate files in the named directory.") - print(" -R, -r or --recursive") - print(" Perform a recursive search for Python files.") - print(" -t ext or --extension=ext") - print(" Add the given extension to the list of file extensions.") - print(" This option may be given multiple times.") - print(" -V or --version") - print(" Show version information and exit.") - print(" -x directory or --exclude=directory") - print(" Specify a directory basename to be excluded.") - print(" This option may be repeated multiple times.") - print() - print(" --body-color=color") - print(" Specify the text color.") - print(" --body-background-color=color") - print(" Specify the text background color.") - print(" --l1header-color=color") - print(" Specify the text color of level 1 headers.") - print(" --l1header-background-color=color") - print(" Specify the text background color of level 1 headers.") - print(" --l2header-color=color") - print(" Specify the text color of level 2 headers.") - print(" --l2header-background-color=color") - print(" Specify the text background color of level 2 headers.") - print(" --cfheader-color=color") - print(" Specify the text color of class and function headers.") - print(" --cfheader-background-color=color") - print(" Specify the text background color of class and function headers.") - print(" --link-color=color") - print(" Specify the text color of hyperlinks.") - print() - print(" --create-qhp") - print(" Enable generation of QtHelp files.") - print(" --qhp-outdir=directory") - print(" Generate QtHelp files in the named directory.") - print(" --qhp-namespace=namespace") - print(" Use the given namespace (mandatory).") - print(" --qhp-virtualfolder=folder") - print(" Use the given virtual folder (mandatory).") - print(" The virtual folder must not contain '/'.") - print(" --qhp-filtername=name") - print(" Use the given name for the custom filter.") - print(" --qhp-filterattribs=attributes") - print(" Add the given attributes to the filter list.") - print(" Attributes must be separated by ':'.") - print(" --qhp-title=title") - print(" Use this as the title for the generated help (mandatory).") - print(" --create-qhc") - print(" Enable generation of QtHelp Collection files.") - sys.exit(1) - -def version(): - """ - Function to show the version information. - """ - print("""eric5-doc {0} - -Eric5 API documentation generator. - -Copyright (c) 2003-2011 Detlev Offenbach <detlev@die-offenbachs.de> -This is free software; see the LICENSE.GPL3 for copying conditions. -There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A -PARTICULAR PURPOSE.""".format(Version)) - sys.exit(1) - -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", - ".eric5project", "_eric5project", "dist", "build", "doc", "docs"] - excludePatterns = [] - outputDir = "doc" - recursive = False - doIndex = True - noempty = False - newline = None - - stylesheetFile = "" - colors = eric5docDefaultColors.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() - - 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) - -if __name__ == '__main__': - main()