epydoc: New package
This commit is contained in:
47
mingw-w64-epydoc/0001-handle-docutils-0.6.patch
Normal file
47
mingw-w64-epydoc/0001-handle-docutils-0.6.patch
Normal file
@@ -0,0 +1,47 @@
|
||||
# Description: Handle problems encountered with docutils 0.6.
|
||||
# The problem here is that the child.data element does not always exist any
|
||||
# more. Apparently, the child element is sometimes a string instead. So, we
|
||||
# work around it by only executing the code in question if child.data can be
|
||||
# referenced. Thanks to Thomas Hille for research and the initial patch.
|
||||
# Bug-Debian: http://bugs.debian.org/561793
|
||||
# Author: Kenneth J. Pronovici <pronovic@debian.org>
|
||||
--- a/epydoc/markup/restructuredtext.py
|
||||
+++ b/epydoc/markup/restructuredtext.py
|
||||
@@ -304,13 +304,14 @@ class _SummaryExtractor(NodeVisitor):
|
||||
# Extract the first sentence.
|
||||
for child in node:
|
||||
if isinstance(child, docutils.nodes.Text):
|
||||
- m = self._SUMMARY_RE.match(child.data)
|
||||
- if m:
|
||||
- summary_pieces.append(docutils.nodes.Text(m.group(1)))
|
||||
- other = child.data[m.end():]
|
||||
- if other and not other.isspace():
|
||||
- self.other_docs = True
|
||||
- break
|
||||
+ if hasattr(child, 'data'):
|
||||
+ m = self._SUMMARY_RE.match(child.data)
|
||||
+ if m:
|
||||
+ summary_pieces.append(docutils.nodes.Text(m.group(1)))
|
||||
+ other = child.data[m.end():]
|
||||
+ if other and not other.isspace():
|
||||
+ self.other_docs = True
|
||||
+ break
|
||||
summary_pieces.append(child)
|
||||
|
||||
summary_doc = self.document.copy() # shallow copy
|
||||
@@ -489,10 +490,11 @@ class _SplitFieldsTranslator(NodeVisitor
|
||||
if (len(fbody[0]) > 0 and
|
||||
isinstance(fbody[0][0], docutils.nodes.Text)):
|
||||
child = fbody[0][0]
|
||||
- if child.data[:1] in ':-':
|
||||
- child.data = child.data[1:].lstrip()
|
||||
- elif child.data[:2] in (' -', ' :'):
|
||||
- child.data = child.data[2:].lstrip()
|
||||
+ if hasattr(child, 'data'):
|
||||
+ if child.data[:1] in ':-':
|
||||
+ child.data = child.data[1:].lstrip()
|
||||
+ elif child.data[:2] in (' -', ' :'):
|
||||
+ child.data = child.data[2:].lstrip()
|
||||
|
||||
# Wrap the field body, and add a new field
|
||||
self._add_field(tagname, arg, fbody)
|
||||
65
mingw-w64-epydoc/0002-python26-tokenizer.patch
Normal file
65
mingw-w64-epydoc/0002-python26-tokenizer.patch
Normal file
@@ -0,0 +1,65 @@
|
||||
# Description: Fix the tokenizer so comment docstrings work with Python 2.6.
|
||||
# Bug: https://sourceforge.net/tracker/index.php?func=detail&aid=2585292&group_id=32455&atid=405618
|
||||
# Bug-Debian: http://bugs.debian.org/590112
|
||||
# Origin: https://sourceforge.net/tracker/?func=detail&aid=2872545&group_id=32455&atid=405620
|
||||
# Author: Andre Malo (ndparker)
|
||||
# Reviewed-by: Kenneth J. Pronovici <pronovic@debian.org>
|
||||
--- a/epydoc/docparser.py
|
||||
+++ b/epydoc/docparser.py
|
||||
@@ -72,6 +72,26 @@
|
||||
from epydoc.compat import *
|
||||
|
||||
######################################################################
|
||||
+## Tokenizer change in 2.6
|
||||
+######################################################################
|
||||
+
|
||||
+def comment_includes_nl():
|
||||
+ """ Determine whether comments are parsed as one or two tokens... """
|
||||
+ readline = iter(u'\n#\n\n'.splitlines(True)).next
|
||||
+ tokens = [
|
||||
+ token.tok_name[tup[0]] for tup in tokenize.generate_tokens(readline)
|
||||
+ ]
|
||||
+ if tokens == ['NL', 'COMMENT', 'NL', 'ENDMARKER']:
|
||||
+ return True
|
||||
+ elif tokens == ['NL', 'COMMENT', 'NL', 'NL', 'ENDMARKER']:
|
||||
+ return False
|
||||
+ raise AssertionError(
|
||||
+ "Tokenizer returns unexexpected tokens: %r" % tokens
|
||||
+ )
|
||||
+
|
||||
+comment_includes_nl = comment_includes_nl()
|
||||
+
|
||||
+######################################################################
|
||||
## Doc Parser
|
||||
######################################################################
|
||||
|
||||
@@ -520,6 +540,10 @@
|
||||
# inside that block, not outside it.
|
||||
start_group = None
|
||||
|
||||
+ # If the comment tokens do not include the NL, every comment token
|
||||
+ # sets this to True in order to swallow the next NL token unprocessed.
|
||||
+ comment_nl_waiting = False
|
||||
+
|
||||
# Check if the source file declares an encoding.
|
||||
encoding = get_module_encoding(module_doc.filename)
|
||||
|
||||
@@ -570,7 +594,9 @@
|
||||
# then discard them: blank lines are not allowed between a
|
||||
# comment block and the thing it describes.
|
||||
elif toktype == tokenize.NL:
|
||||
- if comments and not line_toks:
|
||||
+ if comment_nl_waiting:
|
||||
+ comment_nl_waiting = False
|
||||
+ elif comments and not line_toks:
|
||||
log.warning('Ignoring docstring comment block followed by '
|
||||
'a blank line in %r on line %r' %
|
||||
(module_doc.filename, srow-1))
|
||||
@@ -578,6 +604,7 @@
|
||||
|
||||
# Comment token: add to comments if appropriate.
|
||||
elif toktype == tokenize.COMMENT:
|
||||
+ comment_nl_waiting = not comment_includes_nl
|
||||
if toktext.startswith(COMMENT_DOCSTRING_MARKER):
|
||||
comment_line = toktext[len(COMMENT_DOCSTRING_MARKER):].rstrip()
|
||||
if comment_line.startswith(" "):
|
||||
18
mingw-w64-epydoc/0003-string-exceptions.patch
Normal file
18
mingw-w64-epydoc/0003-string-exceptions.patch
Normal file
@@ -0,0 +1,18 @@
|
||||
# Description: Get rid of string exceptions.
|
||||
# One of the changes brought by Python 2.6 is the removal of string
|
||||
# exceptions. A mass bug filing identified Epydoc as having potential
|
||||
# problems. I later spot-checked all of the exceptions in the code, and I
|
||||
# believe this is the only one that we have to worry about.
|
||||
# Bug-Debian: http://bugs.debian.org/585290
|
||||
# Author: Kenneth J. Pronovici <pronovic@debian.org>
|
||||
--- a/epydoc/apidoc.py
|
||||
+++ b/epydoc/apidoc.py
|
||||
@@ -1352,7 +1352,7 @@ class ClassDoc(NamespaceDoc):
|
||||
nothead=[s for s in nonemptyseqs if cand in s[1:]]
|
||||
if nothead: cand=None #reject candidate
|
||||
else: break
|
||||
- if not cand: raise "Inconsistent hierarchy"
|
||||
+ if not cand: raise TypeError("Inconsistent hierarchy")
|
||||
res.append(cand)
|
||||
for seq in nonemptyseqs: # remove cand
|
||||
if seq[0] == cand: del seq[0]
|
||||
62
mingw-w64-epydoc/PKGBUILD
Normal file
62
mingw-w64-epydoc/PKGBUILD
Normal file
@@ -0,0 +1,62 @@
|
||||
# Maintainer: Alexey Pavlov <alexpux@gmail.com>
|
||||
|
||||
_realname=epydoc
|
||||
pkgbase=mingw-w64-${_realname}
|
||||
pkgname="${MINGW_PACKAGE_PREFIX}-${_realname}"
|
||||
pkgver=3.0.1
|
||||
pkgrel=1
|
||||
pkgdesc="Tool for generating API documentation for Python modules, based on their docstrings (mingw-w64)"
|
||||
arch=('any')
|
||||
url="https://epydoc.sourceforge.net/"
|
||||
license=("MIT")
|
||||
makedepends=("${MINGW_PACKAGE_PREFIX}-gcc"
|
||||
"${MINGW_PACKAGE_PREFIX}-pkg-config")
|
||||
depends=("${MINGW_PACKAGE_PREFIX}-python2"
|
||||
"${MINGW_PACKAGE_PREFIX}-python2-docutils")
|
||||
optdepends=("${MINGW_PACKAGE_PREFIX}-tk: needed for epydocgui"
|
||||
#"${MINGW_PACKAGE_PREFIX}-texlive-bin: needed for PDF conversion"
|
||||
"${MINGW_PACKAGE_PREFIX}-graphviz: needed for graph generation")
|
||||
options=('strip' 'staticlibs')
|
||||
source=("https://downloads.sourceforge.net/sourceforge/${_realname}/${_realname}-${pkgver}.zip"
|
||||
0001-handle-docutils-0.6.patch
|
||||
0002-python26-tokenizer.patch
|
||||
0003-string-exceptions.patch)
|
||||
sha256sums=('574c1dca1b0e8783be0121c32f589cf56255cdb288b4d4e52e60f0a8bcf799cb'
|
||||
'84d6724e0fcb3a5307963cbe37875e72110bf707781c64e7ddff0dfe96eeb1ab'
|
||||
'8bfd54be68ee8e743ab470370042e40130e9cf8c0430d493401fa44eae2d66f6'
|
||||
'099a94ba394f0c1c4f3f721fc3c9cf982a54f182be457faa03a7bb54188c8364')
|
||||
|
||||
prepare() {
|
||||
cd "${srcdir}"/${_realname}-${pkgver}
|
||||
|
||||
# py2 fix
|
||||
sed -i "s|env python|&2|" `grep -Erl "env python" .`
|
||||
|
||||
patch -p1 -i ${srcdir}/0001-handle-docutils-0.6.patch
|
||||
patch -p1 -i ${srcdir}/0002-python26-tokenizer.patch
|
||||
patch -p1 -i ${srcdir}/0003-string-exceptions.patch
|
||||
}
|
||||
|
||||
build() {
|
||||
[[ -d ${srcdir}/build-${MINGW_CHOST} ]] && rm -rf ${srcdir}/build-${MINGW_CHOST}
|
||||
cp -rf ${_realname}-${pkgver} build-${MINGW_CHOST}
|
||||
cd "${srcdir}/build-${MINGW_CHOST}"
|
||||
${MINGW_PREFIX}/bin/python2 setup.py build
|
||||
}
|
||||
|
||||
package() {
|
||||
cd "${srcdir}/build-${MINGW_CHOST}"
|
||||
MSYS2_ARG_CONV_EXCL="--prefix=;--install-scripts=;--install-platlib=" \
|
||||
${MINGW_PREFIX}/bin/python2 setup.py install --prefix=${MINGW_PREFIX} \
|
||||
--root="${pkgdir}" --optimize=1 --skip-build
|
||||
|
||||
# fix python command in files
|
||||
local _mingw_prefix=$(cygpath -am ${MINGW_PREFIX})
|
||||
for _f in "${pkgdir}${MINGW_PREFIX}"/bin/*; do
|
||||
sed -e "s|${_mingw_prefix}/bin/|/usr/bin/env |g" -i ${_f}
|
||||
done
|
||||
|
||||
install -d "${pkgdir}${MINGW_PREFIX}/share/man/man1"
|
||||
install -m644 man/*.1 "${pkgdir}${MINGW_PREFIX}/share/man/man1"
|
||||
install -Dm644 LICENSE.txt "${pkgdir}${MINGW_PREFIX}/share/licenses/${_realname}/LICENSE"
|
||||
}
|
||||
Reference in New Issue
Block a user