From: <fwi...@us...> - 2006-04-05 23:07:16
|
Author: fwiemann Date: 2006-04-06 01:06:44 +0200 (Thu, 06 Apr 2006) New Revision: 4504 Modified: branches/directives/docutils/docutils/parsers/rst/__init__.py branches/directives/docutils/docutils/parsers/rst/directives/misc.py Log: added a Directive.system_message convenience method (result from brainstorming with David); I think I like it; what do you think, David? Something that is bothering me is that we do not keep the actual (externally visible) directive interface and the convenience methods separated; I added a comment to separate them. Modified: branches/directives/docutils/docutils/parsers/rst/__init__.py =================================================================== --- branches/directives/docutils/docutils/parsers/rst/__init__.py 2006-04-05 22:10:44 UTC (rev 4503) +++ branches/directives/docutils/docutils/parsers/rst/__init__.py 2006-04-05 23:06:44 UTC (rev 4504) @@ -75,7 +75,7 @@ import docutils.parsers import docutils.statemachine from docutils.parsers.rst import states -from docutils import frontend +from docutils import frontend, nodes class Parser(docutils.parsers.Parser): @@ -258,7 +258,40 @@ def run(self): raise NotImplementedError('Must override run() is subclass.') + # Convenience methods: + def system_message(self, level, message, *children, **kwargs): + """ + Return a system message with the current directive block and + the line number set. + + Call "return [self.system_message(level, message)]" from + within a directive implementation to return one single system + message, which automatically gets the directive block and the + line number added. + """ + children += (nodes.literal_block(self.block_text, self.block_text),) + kwargs.setdefault('line', self.lineno) + return self.state_machine.reporter.system_message( + level, message, *children, **kwargs) + + def debug(self, *args, **kwargs): + return self.system_message(0, *args, **kwargs) + + def info(self, *args, **kwargs): + return self.system_message(1, *args, **kwargs) + + def warning(self, *args, **kwargs): + return self.system_message(2, *args, **kwargs) + + def error(self, *args, **kwargs): + return self.system_message(3, *args, **kwargs) + + def severe(self, *args, **kwargs): + return self.system_message(4, *args, **kwargs) + + + def convert_directive_function(directive_fn): """ Define & return a directive class generated from `directive_fn`. Modified: branches/directives/docutils/docutils/parsers/rst/directives/misc.py =================================================================== --- branches/directives/docutils/docutils/parsers/rst/directives/misc.py 2006-04-05 22:10:44 UTC (rev 4503) +++ branches/directives/docutils/docutils/parsers/rst/directives/misc.py 2006-04-05 23:06:44 UTC (rev 4504) @@ -255,11 +255,9 @@ def run(self): if not isinstance(self.state, states.SubstitutionDef): - error = self.state_machine.reporter.error( - 'Invalid context: the "%s" directive can only be used within ' - 'a substitution definition.' % self.name, nodes.literal_block( - self.block_text, self.block_text), line=self.lineno) - return [error] + return [self.error('Invalid context: the "%s" directive can only ' + 'be used within a substitution definition.' + % self.name)] substitution_definition = self.state_machine.node if self.options.has_key('trim'): substitution_definition.attributes['ltrim'] = 1 @@ -274,12 +272,9 @@ try: decoded = directives.unicode_code(code) except ValueError, err: - error = self.state_machine.reporter.error( + return [self.error( 'Invalid character code: %s\n%s: %s' - % (code, err.__class__.__name__, err), - nodes.literal_block(self.block_text, self.block_text), - line=self.lineno) - return [error] + % (code, err.__class__.__name__, err))] element += nodes.Text(decoded) return element.children |