use pygments for sourcecode highlightning
--HG-- branch : trunk
This commit is contained in:
		
							parent
							
								
									5c854bea30
								
							
						
					
					
						commit
						dfc6ac3b5a
					
				
							
								
								
									
										30
									
								
								doc/path.txt
								
								
								
								
							
							
						
						
									
										30
									
								
								doc/path.txt
								
								
								
								
							|  | @ -20,7 +20,9 @@ of course all the functionality is bundled together rather than spread over a | ||||||
| number of modules. | number of modules. | ||||||
| 
 | 
 | ||||||
| Example usage, here we use the :api:`py.test.ensuretemp()` function to create | Example usage, here we use the :api:`py.test.ensuretemp()` function to create | ||||||
| a :api:`py.path.local` object for us (which wraps a directory):: | a :api:`py.path.local` object for us (which wraps a directory): | ||||||
|  | 
 | ||||||
|  | .. sourcecode:: pycon | ||||||
| 
 | 
 | ||||||
|   >>> import py |   >>> import py | ||||||
|   >>> temppath = py.test.ensuretemp('py.path_documentation') |   >>> temppath = py.test.ensuretemp('py.path_documentation') | ||||||
|  | @ -46,7 +48,9 @@ Both allow you to access relatively advanced features such as metadata and | ||||||
| versioning, and both in a way more user-friendly manner than existing other | versioning, and both in a way more user-friendly manner than existing other | ||||||
| solutions. | solutions. | ||||||
| 
 | 
 | ||||||
| Some example usage of :api:`py.path.svnurl`:: | Some example usage of :api:`py.path.svnurl`: | ||||||
|  | 
 | ||||||
|  | .. sourcecode:: pycon | ||||||
| 
 | 
 | ||||||
|   .. >>> import py |   .. >>> import py | ||||||
|   .. >>> if not py.test.config.option.urlcheck: raise ValueError('skipchunk') |   .. >>> if not py.test.config.option.urlcheck: raise ValueError('skipchunk') | ||||||
|  | @ -59,7 +63,9 @@ Some example usage of :api:`py.path.svnurl`:: | ||||||
|   >>> time.strftime('%Y-%m-%d', time.gmtime(firstentry.date)) |   >>> time.strftime('%Y-%m-%d', time.gmtime(firstentry.date)) | ||||||
|   '2004-10-02' |   '2004-10-02' | ||||||
| 
 | 
 | ||||||
| Example usage of :api:`py.path.svnwc`:: | Example usage of :api:`py.path.svnwc`: | ||||||
|  | 
 | ||||||
|  | .. sourcecode:: pycon | ||||||
| 
 | 
 | ||||||
|   .. >>> if not py.test.config.option.urlcheck: raise ValueError('skipchunk') |   .. >>> if not py.test.config.option.urlcheck: raise ValueError('skipchunk') | ||||||
|   >>> temp = py.test.ensuretemp('py.path_documentation') |   >>> temp = py.test.ensuretemp('py.path_documentation') | ||||||
|  | @ -98,7 +104,7 @@ Searching `.txt` files | ||||||
| Search for a particular string inside all files with a .txt extension in a | Search for a particular string inside all files with a .txt extension in a | ||||||
| specific directory. | specific directory. | ||||||
| 
 | 
 | ||||||
| :: | .. sourcecode:: pycon | ||||||
| 
 | 
 | ||||||
|   >>> dirpath = temppath.ensure('testdir', dir=True) |   >>> dirpath = temppath.ensure('testdir', dir=True) | ||||||
|   >>> dirpath.join('textfile1.txt').write('foo bar baz') |   >>> dirpath.join('textfile1.txt').write('foo bar baz') | ||||||
|  | @ -120,7 +126,9 @@ Working with Paths | ||||||
| This example shows the :api:`py.path` features to deal with | This example shows the :api:`py.path` features to deal with | ||||||
| filesystem paths Note that the filesystem is never touched, | filesystem paths Note that the filesystem is never touched, | ||||||
| all operations are performed on a string level (so the paths | all operations are performed on a string level (so the paths | ||||||
| don't have to exist, either):: | don't have to exist, either): | ||||||
|  | 
 | ||||||
|  | .. sourcecode:: pycon | ||||||
| 
 | 
 | ||||||
|   >>> p1 = py.path.local('/foo/bar') |   >>> p1 = py.path.local('/foo/bar') | ||||||
|   >>> p2 = p1.join('baz/qux') |   >>> p2 = p1.join('baz/qux') | ||||||
|  | @ -153,7 +161,9 @@ Checking path types | ||||||
| ....................... | ....................... | ||||||
| 
 | 
 | ||||||
| Now we will show a bit about the powerful 'check()' method on paths, which | Now we will show a bit about the powerful 'check()' method on paths, which | ||||||
| allows you to check whether a file exists, what type it is, etc.:: | allows you to check whether a file exists, what type it is, etc.: | ||||||
|  | 
 | ||||||
|  | .. sourcecode:: pycon | ||||||
| 
 | 
 | ||||||
|   >>> file1 = temppath.join('file1') |   >>> file1 = temppath.join('file1') | ||||||
|   >>> file1.check() # does it exist? |   >>> file1.check() # does it exist? | ||||||
|  | @ -177,7 +187,9 @@ Setting svn-properties | ||||||
| ....................... | ....................... | ||||||
| 
 | 
 | ||||||
| As an example of 'uncommon' methods, we'll show how to read and write | As an example of 'uncommon' methods, we'll show how to read and write | ||||||
| properties in an :api:`py.path.svnwc` instance:: | properties in an :api:`py.path.svnwc` instance: | ||||||
|  | 
 | ||||||
|  | .. sourcecode:: pycon | ||||||
| 
 | 
 | ||||||
|   .. >>> if not py.test.config.option.urlcheck: raise ValueError('skipchunk') |   .. >>> if not py.test.config.option.urlcheck: raise ValueError('skipchunk') | ||||||
|   >>> wc.propget('foo') |   >>> wc.propget('foo') | ||||||
|  | @ -195,7 +207,9 @@ SVN authentication | ||||||
| ....................... | ....................... | ||||||
| 
 | 
 | ||||||
| Some uncommon functionality can also be provided as extensions, such as SVN | Some uncommon functionality can also be provided as extensions, such as SVN | ||||||
| authentication:: | authentication: | ||||||
|  | 
 | ||||||
|  | .. sourcecode:: pycon | ||||||
| 
 | 
 | ||||||
|   .. >>> if not py.test.config.option.urlcheck: raise ValueError('skipchunk') |   .. >>> if not py.test.config.option.urlcheck: raise ValueError('skipchunk') | ||||||
|   >>> auth = py.path.SvnAuth('anonymous', 'user', cache_auth=False, |   >>> auth = py.path.SvnAuth('anonymous', 'user', cache_auth=False, | ||||||
|  |  | ||||||
|  | @ -96,6 +96,47 @@ class ReSTSyntaxTest(py.test.collect.Item): | ||||||
|         toctree_directive.options = {'maxdepth': int, 'glob': directives.flag, |         toctree_directive.options = {'maxdepth': int, 'glob': directives.flag, | ||||||
|                              'hidden': directives.flag} |                              'hidden': directives.flag} | ||||||
|         directives.register_directive('toctree', toctree_directive) |         directives.register_directive('toctree', toctree_directive) | ||||||
|  |         self.register_pygments() | ||||||
|  | 
 | ||||||
|  |     def register_pygments(self): | ||||||
|  |         # taken from pygments-main/external/rst-directive.py  | ||||||
|  |         try: | ||||||
|  |             from pygments.formatters import HtmlFormatter | ||||||
|  |         except ImportError: | ||||||
|  |             def pygments_directive(name, arguments, options, content, lineno, | ||||||
|  |                                    content_offset, block_text, state, state_machine): | ||||||
|  |                 return [] | ||||||
|  |         else: | ||||||
|  |             # The default formatter | ||||||
|  |             DEFAULT = HtmlFormatter(noclasses=True) | ||||||
|  |             # Add name -> formatter pairs for every variant you want to use | ||||||
|  |             VARIANTS = { | ||||||
|  |                 # 'linenos': HtmlFormatter(noclasses=INLINESTYLES, linenos=True), | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             from docutils import nodes | ||||||
|  |             from docutils.parsers.rst import directives | ||||||
|  | 
 | ||||||
|  |             from pygments import highlight | ||||||
|  |             from pygments.lexers import get_lexer_by_name, TextLexer | ||||||
|  | 
 | ||||||
|  |             def pygments_directive(name, arguments, options, content, lineno, | ||||||
|  |                                    content_offset, block_text, state, state_machine): | ||||||
|  |                 try: | ||||||
|  |                     lexer = get_lexer_by_name(arguments[0]) | ||||||
|  |                 except ValueError: | ||||||
|  |                     # no lexer found - use the text one instead of an exception | ||||||
|  |                     lexer = TextLexer() | ||||||
|  |                 # take an arbitrary option if more than one is given | ||||||
|  |                 formatter = options and VARIANTS[options.keys()[0]] or DEFAULT | ||||||
|  |                 parsed = highlight(u'\n'.join(content), lexer, formatter) | ||||||
|  |                 return [nodes.raw('', parsed, format='html')] | ||||||
|  | 
 | ||||||
|  |         pygments_directive.arguments = (1, 0, 1) | ||||||
|  |         pygments_directive.content = 1 | ||||||
|  |         pygments_directive.options = dict([(key, directives.flag) for key in VARIANTS]) | ||||||
|  | 
 | ||||||
|  |         directives.register_directive('sourcecode', pygments_directive) | ||||||
| 
 | 
 | ||||||
|     def resolve_linkrole(self, name, text, check=True): |     def resolve_linkrole(self, name, text, check=True): | ||||||
|         apigen_relpath = self.project.apigen_relpath |         apigen_relpath = self.project.apigen_relpath | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue