Thread: [Epydoc-commits] SF.net SVN: epydoc: [1533] trunk/epydoc/src/epydoc/docwriter/xlink.py
Brought to you by:
edloper
From: <dva...@us...> - 2007-02-19 19:51:00
|
Revision: 1533 http://svn.sourceforge.net/epydoc/?rev=1533&view=rev Author: dvarrazzo Date: 2007-02-19 11:50:59 -0800 (Mon, 19 Feb 2007) Log Message: ----------- - Using Epydoc logger to report index file parsing errors. - More robust index file parsing. Modified Paths: -------------- trunk/epydoc/src/epydoc/docwriter/xlink.py Modified: trunk/epydoc/src/epydoc/docwriter/xlink.py =================================================================== --- trunk/epydoc/src/epydoc/docwriter/xlink.py 2007-02-19 01:23:58 UTC (rev 1532) +++ trunk/epydoc/src/epydoc/docwriter/xlink.py 2007-02-19 19:50:59 UTC (rev 1533) @@ -79,6 +79,8 @@ from docutils.parsers.rst import roles from docutils import nodes, utils +from epydoc import log + class UrlGenerator: """ Generate URL from an object name. @@ -199,6 +201,11 @@ Prefix portion for the URL's returned by `get_url()`. """ + self._filename = None + """ + Not very important: only for logging. + """ + def get_url(self, name): cname = self.get_canonical_name(name) url = self._exact_matches.get(cname, None) @@ -206,13 +213,13 @@ # go for a partial match vals = self._partial_names.get(cname) - if len(vals) == 1: - url = self._exact_matches[vals[0]] - - elif not vals: + if vals is None: raise IndexError( "no object named '%s' found" % (name)) + elif len(vals) == 1: + url = self._exact_matches[vals[0]] + else: raise self.IndexAmbiguous( "found %d objects that '%s' may refer to: %s" @@ -240,16 +247,27 @@ f : `str` or file a file name or file-like object fron which read the index. """ + self._filename = str(f) + if isinstance(f, basestring): - f = file(f) + f = open(f) self.load_records(self._iter_tuples(f)) def _iter_tuples(self, f): """Iterate on a file returning 2-tuples.""" - for row in f: - yield row.rstrip().split('\t', 1) + for nrow, row in enumerate(f): + # skip blank lines + row = row.rstrip() + if not row: continue + rec = row.split('\t', 2) + if len(rec) == 2: + yield rec + else: + log.warning("invalid row in '%s' row %d: '%s'" + % (self._filename, nrow+1, row)) + def load_records(self, records): """ Read a sequence of pairs name -> url and populate the internal maps. @@ -261,8 +279,9 @@ for name, url in records: cname = self.get_canonical_name(name) if not cname: - # Have to decide how to warn. - raise NotImplementedError("WARNING NAME NOT VALID") + log.warning("invalid object name in '%s': '%s'" + % (self._filename, name)) + continue self._exact_matches[name] = url self._exact_matches[cname] = url This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dva...@us...> - 2007-02-19 22:20:17
|
Revision: 1534 http://svn.sourceforge.net/epydoc/?rev=1534&view=rev Author: dvarrazzo Date: 2007-02-19 14:20:09 -0800 (Mon, 19 Feb 2007) Log Message: ----------- - Always using the registered name to get the resolver, so it can work as default role too. Modified Paths: -------------- trunk/epydoc/src/epydoc/docwriter/xlink.py Modified: trunk/epydoc/src/epydoc/docwriter/xlink.py =================================================================== --- trunk/epydoc/src/epydoc/docwriter/xlink.py 2007-02-19 19:50:59 UTC (rev 1533) +++ trunk/epydoc/src/epydoc/docwriter/xlink.py 2007-02-19 22:20:09 UTC (rev 1534) @@ -365,7 +365,7 @@ # Get the resolver from the register and create an url from it. try: - url = api_register[n].get_url(text) + url = api_register[name].get_url(text) except IndexError, exc: msg = inliner.reporter.warning(str(exc), line=lineno) if problematic: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dva...@us...> - 2007-02-19 22:55:23
|
Revision: 1535 http://svn.sourceforge.net/epydoc/?rev=1535&view=rev Author: dvarrazzo Date: 2007-02-19 14:55:22 -0800 (Mon, 19 Feb 2007) Log Message: ----------- - Don't load duplicate entries in the URL generators. Modified Paths: -------------- trunk/epydoc/src/epydoc/docwriter/xlink.py Modified: trunk/epydoc/src/epydoc/docwriter/xlink.py =================================================================== --- trunk/epydoc/src/epydoc/docwriter/xlink.py 2007-02-19 22:20:09 UTC (rev 1534) +++ trunk/epydoc/src/epydoc/docwriter/xlink.py 2007-02-19 22:55:22 UTC (rev 1535) @@ -283,6 +283,10 @@ % (self._filename, name)) continue + # discard duplicates + if name in self._exact_matches: + continue + self._exact_matches[name] = url self._exact_matches[cname] = url This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2007-02-27 05:16:43
|
Revision: 1556 http://svn.sourceforge.net/epydoc/?rev=1556&view=rev Author: edloper Date: 2007-02-26 21:16:41 -0800 (Mon, 26 Feb 2007) Log Message: ----------- - Don't fail if docutils module isn't available -- the DocUrlGenerator class may still be useful. Modified Paths: -------------- trunk/epydoc/src/epydoc/docwriter/xlink.py Modified: trunk/epydoc/src/epydoc/docwriter/xlink.py =================================================================== --- trunk/epydoc/src/epydoc/docwriter/xlink.py 2007-02-27 04:00:10 UTC (rev 1555) +++ trunk/epydoc/src/epydoc/docwriter/xlink.py 2007-02-27 05:16:41 UTC (rev 1556) @@ -75,10 +75,8 @@ import re import sys +from optparse import OptionValueError -from docutils.parsers.rst import roles -from docutils import nodes, utils - from epydoc import log class UrlGenerator: @@ -353,6 +351,17 @@ """ api_register[name].prefix = prefix +###################################################################### +# Below this point requires docutils. +try: + import docutils + from docutils.parsers.rst import roles + from docutils import nodes, utils + from docutils.readers.standalone import Reader +except ImportError: + docutils = roles = nodes = utils = None + class Reader: settings_spec = () + def create_api_role(name, problematic): """ Create and register a new role to create links for an API documentation. @@ -362,6 +371,8 @@ """ def resolve_api_name(n, rawtext, text, lineno, inliner, options={}, content=[]): + if docutils is None: + raise AssertionError('requires docutils') # node in monotype font text = utils.unescape(text) @@ -388,8 +399,6 @@ #{ Command line parsing # -------------------- -#from docutils import SettingsSpec -from optparse import OptionValueError def split_name(value): """ @@ -410,7 +419,6 @@ return (name, val) -from docutils.readers.standalone import Reader class ApiLinkReader(Reader): """ @@ -438,6 +446,11 @@ {'metavar': 'NAME:STRING', 'action': 'append'} ),)) + Reader.settings_spec + def __init__(self, *args, **kwargs): + if docutils is None: + raise AssertionError('requires docutils') + Reader.__init__(self, *args, **kwargs) + def read(self, source, parser, settings): self.read_configuration(settings, problematic=True) return Reader.read(self, source, parser, settings) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dva...@us...> - 2007-03-14 01:53:43
|
Revision: 1586 http://svn.sourceforge.net/epydoc/?rev=1586&view=rev Author: dvarrazzo Date: 2007-03-13 18:53:42 -0700 (Tue, 13 Mar 2007) Log Message: ----------- - Some docstring fixed. Modified Paths: -------------- trunk/epydoc/src/epydoc/docwriter/xlink.py Modified: trunk/epydoc/src/epydoc/docwriter/xlink.py =================================================================== --- trunk/epydoc/src/epydoc/docwriter/xlink.py 2007-03-14 01:53:14 UTC (rev 1585) +++ trunk/epydoc/src/epydoc/docwriter/xlink.py 2007-03-14 01:53:42 UTC (rev 1586) @@ -298,12 +298,14 @@ api_register = {} """ Mapping from the API name to the `UrlGenerator` to be used. + +Use `register_api()` to add new generators to the register. """ def register_api(name, generator=None): """Register the API `name` into the `api_register`. - A registered API is available to the markup as the interpreted text + A registered API will be available to the markup as the interpreted text role ``name``. If a `generator` is not provided, register a `VoidUrlGenerator` instance: @@ -366,8 +368,16 @@ """ Create and register a new role to create links for an API documentation. - Create a role called `name`, which will use the ``name`` registered - URL resolver to create a link for an object. + Create a role called `name`, which will use the URL resolver registered as + ``name`` in `api_register` to create a link for an object. + + :Parameters: + `name` : `str` + name of the role to create. + `problematic` : `bool` + if True, the registered role will create problematic nodes in + case of failed references. If False, a warning will be raised + anyway, but the output will appear as an ordinary literal. """ def resolve_api_name(n, rawtext, text, lineno, inliner, options={}, content=[]): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ed...@us...> - 2008-02-15 01:00:44
|
Revision: 1719 http://epydoc.svn.sourceforge.net/epydoc/?rev=1719&view=rev Author: edloper Date: 2008-02-14 17:00:39 -0800 (Thu, 14 Feb 2008) Log Message: ----------- - Added support for the syntax `name <target>` in xlink. Modified Paths: -------------- trunk/epydoc/src/epydoc/docwriter/xlink.py Modified: trunk/epydoc/src/epydoc/docwriter/xlink.py =================================================================== --- trunk/epydoc/src/epydoc/docwriter/xlink.py 2008-02-14 22:25:14 UTC (rev 1718) +++ trunk/epydoc/src/epydoc/docwriter/xlink.py 2008-02-15 01:00:39 UTC (rev 1719) @@ -364,6 +364,8 @@ docutils = roles = nodes = utils = None class Reader: settings_spec = () +_TARGET_RE = re.compile(r'^(.*?)\s*<(?:URI:|URL:)?([^<>]+)>$') + def create_api_role(name, problematic): """ Create and register a new role to create links for an API documentation. @@ -384,13 +386,18 @@ if docutils is None: raise AssertionError('requires docutils') + # Check if there's separate text & targets + m = _TARGET_RE.match(text) + if m: text, target = m.groups() + else: target = text + # node in monotype font text = utils.unescape(text) node = nodes.literal(rawtext, text, **options) # Get the resolver from the register and create an url from it. try: - url = api_register[name].get_url(text) + url = api_register[name].get_url(target) except IndexError, exc: msg = inliner.reporter.warning(str(exc), line=lineno) if problematic: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |