PK62EGG-INFO/dependency_links.txt PK6qI,,EGG-INFO/entry_points.txt[trac.plugins] tracpygments = tracpygments PK6OddEGG-INFO/PKG-INFOMetadata-Version: 1.0 Name: TracPygments Version: 0.3 Summary: Trac syntax colorer using Pygments Home-page: http://trac-hacks.org/wiki/TracPygmentsPlugin Author: Matt Good Author-email: matt@matt-good.net License: BSD Description: Keywords: trac.mimeview Platform: UNKNOWN Classifier: Framework :: Trac Classifier: License :: OSI Approved :: BSD License PK6EGG-INFO/requires.txtPygments >= 0.5PK66 %QQEGG-INFO/SOURCES.txtsetup.cfg setup.py TracPygments.egg-info/PKG-INFO TracPygments.egg-info/SOURCES.txt TracPygments.egg-info/dependency_links.txt TracPygments.egg-info/entry_points.txt TracPygments.egg-info/requires.txt TracPygments.egg-info/top_level.txt TracPygments.egg-info/zip-safe tracpygments/__init__.py tracpygments/templates/pygments_settings.cs PK6[ EGG-INFO/top_level.txttracpygments PK᥺62EGG-INFO/zip-safe PK᥺6tQ?( ( tracpygments/__init__.py# -*- coding: utf-8 -*- # # Copyright (C) 2006 Matthew Good # All rights reserved. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms # are also available at http://trac.edgewall.org/wiki/TracLicense. # # Author: Matthew Good """Syntax highlighting based on Pygments.""" from datetime import datetime import os from pkg_resources import resource_filename import re import time from trac.core import * from trac.config import ListOption, Option from trac.mimeview.api import IHTMLPreviewRenderer, Mimeview from trac.wiki.api import IWikiMacroProvider from trac.util.datefmt import http_date from trac.util.html import Markup from trac.web import IRequestHandler, IRequestFilter from trac.web.chrome import add_link, ITemplateProvider try: import pygments from pygments.lexers import get_lexer_by_name from pygments.formatters.html import HtmlFormatter from pygments.styles import get_style_by_name have_pygments = True except ImportError, e: have_pygments = False else: have_pygments = True __all__ = ['PygmentsRenderer'] class PygmentsRenderer(Component): """Syntax highlighting based on Pygments.""" implements(IHTMLPreviewRenderer, IRequestHandler, IRequestFilter, IWikiMacroProvider, ITemplateProvider) default_style = Option('mimeviewer', 'pygments_default_style', 'trac', """The default style to use for Pygments syntax highlighting.""") pygments_modes = ListOption('mimeviewer', 'pygments_modes', '', doc= """List of additional MIME types known by Pygments. For each, a tuple `mimetype:mode:quality` has to be specified, where `mimetype` is the MIME type, `mode` is the corresponding Pygments mode to be used for the conversion and `quality` is the quality ratio associated to this conversion. That can also be used to override the default quality ratio used by the Pygments render.""") expand_tabs = True returns_source = True QUALITY_RATIO = 7 EXAMPLE = """ Hello, world!

Hello, world!

""" def __init__(self): self.log.debug("Pygments installed? %r", have_pygments) if have_pygments: version = getattr(pygments, '__version__', None) if version: self.log.debug('Pygments Version: %s' % version) self._types = None # IHTMLPreviewRenderer implementation def get_quality_ratio(self, mimetype): # Extend default MIME type to mode mappings with configured ones self._init_types() try: return self._types[mimetype][1] except KeyError: return 0 def render(self, req, mimetype, content, filename=None, rev=None): self._init_types() try: mimetype = mimetype.split(';', 1)[0] language = self._types[mimetype][0] return self._highlight(language, content, True) except (KeyError, ValueError): raise Exception("No Pygments lexer found for mime-type '%s'." % mimetype) # IWikiMacroProvider implementation def get_macros(self): self._init_types() return self._languages.keys() def get_macro_description(self, name): self._init_types() return 'Syntax highlighting for %s using Pygments' % self._languages[name] def render_macro(self, req, name, content): self._init_types() return self._highlight(name, content, False) # IRequestFilter def pre_process_request(self, req, handler): return handler def post_process_request(self, req, template, content_type): if not getattr(req, '_no_pygments_stylesheet', False): add_link(req, 'stylesheet', self.env.href('pygments', '%s.css' % req.session.get('pygments_style', self.default_style))) return template, content_type # IRequestHandler implementation def match_request(self, req): if have_pygments: if re.match(r'/pygments/?$', req.path_info): return True match = re.match(r'/pygments/(\w+)\.css$', req.path_info) if match: try: req.args['style'] = get_style_by_name(match.group(1)) except ValueError: return False return True return False def process_request(self, req): # settings panel if not 'style' in req.args: req._no_pygments_stylesheet = True styles = list(get_all_styles()) styles.sort(lambda a, b: cmp(a.lower(), b.lower())) if req.method == 'POST': style = req.args.get('new_style') if style and style in styles: req.session['pygments_style'] = style output = self._highlight('html', self.EXAMPLE, False) req.hdf['output'] = Markup(output) req.hdf['current'] = req.session.get('pygments_style', self.default_style) req.hdf['styles'] = styles req.hdf['pygments_path'] = self.env.href.pygments() return 'pygments_settings.cs', None # provide stylesheet else: style = req.args['style'] parts = style.__module__.split('.') filename = resource_filename('.'.join(parts[:-1]), parts[-1] + '.py') mtime = datetime.utcfromtimestamp(os.path.getmtime(filename)) last_modified = http_date(time.mktime(mtime.timetuple())) if last_modified == req.get_header('If-Modified-Since'): req.send_response(304) req.end_headers() return formatter = HtmlFormatter(style=style) content = u'\n\n'.join([ formatter.get_style_defs('div.code pre'), formatter.get_style_defs('table.code td') ]).encode('utf-8') req.send_response(200) req.send_header('Content-Type', 'text/css; charset=utf-8') req.send_header('Last-Modified', last_modified) req.send_header('Content-Length', len(content)) req.write(content) # ITemplateProvider methods def get_templates_dirs(self): return [resource_filename(__name__, 'templates')] def get_htdocs_dirs(self): return () # Internal methods def _init_types(self): if self._types is None: self._types = {} self._languages = {} if have_pygments: for name, aliases, _, mimetypes in get_all_lexers(): for mimetype in mimetypes: self._types[mimetype] = (aliases[0], self.QUALITY_RATIO) for alias in aliases: self._languages[alias] = name self._types.update( Mimeview(self.env).configured_modes_mapping('pygments') ) def _highlight(self, language, content, annotate): formatter = HtmlFormatter(cssclass=not annotate and 'code' or '') html = pygments.highlight(content, get_lexer_by_name(language), formatter).rstrip('\n') if annotate: return html[len('
'):-len('
')].splitlines() return html def get_all_lexers(): from pygments.lexers._mapping import LEXERS from pygments.plugin import find_plugin_lexers for item in LEXERS.itervalues(): yield item[1:] for cls in find_plugin_lexers(): yield cls.name, cls.aliases, cls.filenames, cls.mimetypes def get_all_styles(): from pygments.styles import find_plugin_styles, STYLE_MAP for name in STYLE_MAP: yield name for name, _ in find_plugin_styles(): yield name PK6ŭR.R.tracpygments/__init__.pyc; 6XFc@sHdZdklZdkZdklZdkZdkZdkTdkl Z l Z dk l Z l Z dklZdklZd klZd klZlZd klZlZy:dkZd klZd klZdkl Z e!Z"Wne#j oZ$e%Z"nXe!Z"dgZ&de'fdYZ(dZ)dZ*dS(s&Syntax highlighting based on Pygments.(sdatetimeN(sresource_filename(s*(s ListOptionsOption(sIHTMLPreviewRenderersMimeview(sIWikiMacroProvider(s http_date(sMarkup(sIRequestHandlersIRequestFilter(sadd_linksITemplateProvider(sget_lexer_by_name(s HtmlFormatter(sget_style_by_namesPygmentsRenderercBstZdZeeeeeee ddddZ e dddddZ e Ze Zd Zd Zd Zd Zeed ZdZdZdZdZdZdZdZdZdZdZdZ RS(s&Syntax highlighting based on Pygments.s mimeviewerspygments_default_stylestracs:The default style to use for Pygments syntax highlighting.spygments_modesssdocsList of additional MIME types known by Pygments. For each, a tuple `mimetype:mode:quality` has to be specified, where `mimetype` is the MIME type, `mode` is the corresponding Pygments mode to be used for the conversion and `quality` is the quality ratio associated to this conversion. That can also be used to override the default quality ratio used by the Pygments render.is Hello, world!

Hello, world!

cCs\|iidtto5ttdt}|o|iid|qOnt|_dS(NsPygments installed? %rs __version__sPygments Version: %s( sselfslogsdebugs have_pygmentssgetattrspygmentssNonesversions_types(sselfsversion((s:build/bdist.darwin-8.9.1-i386/egg/tracpygments/__init__.pys__init__Ss cCs;|iy|i|dSWntj o dSnXdS(Nii(sselfs _init_typess_typessmimetypesKeyError(sselfsmimetype((s:build/bdist.darwin-8.9.1-i386/egg/tracpygments/__init__.pysget_quality_ratio^s  cCsx|iy>|iddd}|i|d}|i||tSWn)t t fj ot d|nXdS(Ns;iis+No Pygments lexer found for mime-type '%s'.( sselfs _init_typessmimetypessplits_typesslanguages _highlightscontentsTruesKeyErrors ValueErrors Exception(sselfsreqsmimetypescontentsfilenamesrevslanguage((s:build/bdist.darwin-8.9.1-i386/egg/tracpygments/__init__.pysrenderfs cCs|i|iiSdS(N(sselfs _init_typess _languagesskeys(sself((s:build/bdist.darwin-8.9.1-i386/egg/tracpygments/__init__.pys get_macrosrs cCs|id|i|SdS(Ns)Syntax highlighting for %s using Pygments(sselfs _init_typess _languagessname(sselfsname((s:build/bdist.darwin-8.9.1-i386/egg/tracpygments/__init__.pysget_macro_descriptionvs cCs!|i|i||tSdS(N(sselfs _init_typess _highlightsnamescontentsFalse(sselfsreqsnamescontent((s:build/bdist.darwin-8.9.1-i386/egg/tracpygments/__init__.pys render_macrozs cCs|SdS(N(shandler(sselfsreqshandler((s:build/bdist.darwin-8.9.1-i386/egg/tracpygments/__init__.pyspre_process_requestsc Cs[t|dt o9t|d|iidd|iid|i n||fSdS(Ns_no_pygments_stylesheets stylesheetspygmentss%s.cssspygments_style( sgetattrsreqsFalsesadd_linksselfsenvshrefssessionsgets default_stylestemplates content_type(sselfsreqstemplates content_type((s:build/bdist.darwin-8.9.1-i386/egg/tracpygments/__init__.pyspost_process_requests9cCstotid|iotSntid|i}|oBy t|id|id|id}|iid }td i|d |d d}tit i!i"|}t$t%i&|i'} | |i)djo|i*d|i+dSnt,d|}di|i.d|i.dgi/d}|i*d|i1dd|i1d| |i1dt2||i3|dS(NsstylecCst|i|iS(N(scmpsaslowersb(sasb((s:build/bdist.darwin-8.9.1-i386/egg/tracpygments/__init__.pysssPOSTs new_stylespygments_styleshtmlsoutputscurrentsstyless pygments_pathspygments_settings.css.is.pysIf-Modified-Sincei0u s div.code pres table.code tdsutf-8is Content-Typestext/css; charset=utf-8s Last-ModifiedsContent-Length(4sreqsargssTrues_no_pygments_stylesheetslistsget_all_stylessstylesssortsmethodsgetsstylessessionsselfs _highlightsEXAMPLEsFalsesoutputsMarkupshdfs default_stylesenvshrefspygmentssNones __module__ssplitspartssresource_filenamesjoinsfilenamesdatetimesutcfromtimestampsosspathsgetmtimesmtimes http_datestimesmktimes timetuples last_modifieds get_headers send_responses end_headerss HtmlFormatters formattersget_style_defssencodescontents send_headerslenswrite( sselfsreqsmtimesstylesfilenamescontentspartss formattersstyless last_modifiedsoutput((s:build/bdist.darwin-8.9.1-i386/egg/tracpygments/__init__.pysprocess_requests>    $  0 cCsttdgSdS(Ns templates(sresource_filenames__name__(sself((s:build/bdist.darwin-8.9.1-i386/egg/tracpygments/__init__.pysget_templates_dirsscCsfSdS(N((sself((s:build/bdist.darwin-8.9.1-i386/egg/tracpygments/__init__.pysget_htdocs_dirsscCs|itjoh|_h|_toxftD][\}}}}x(|D] }|d|i f|i|
s
( s HtmlFormattersannotates formatterspygmentss highlightscontentsget_lexer_by_nameslanguagesrstripshtmlslens splitlines(sselfslanguagescontentsannotateshtmls formatter((s:build/bdist.darwin-8.9.1-i386/egg/tracpygments/__init__.pys _highlights "(!s__name__s __module__s__doc__s implementssIHTMLPreviewRenderersIRequestHandlersIRequestFiltersIWikiMacroProvidersITemplateProvidersOptions default_styles ListOptionspygments_modessTrues expand_tabssreturns_sources QUALITY_RATIOsEXAMPLEs__init__sget_quality_ratiosNonesrenders get_macrossget_macro_descriptions render_macrospre_process_requestspost_process_requests match_requestsprocess_requestsget_templates_dirssget_htdocs_dirss _init_typess _highlight(((s:build/bdist.darwin-8.9.1-i386/egg/tracpygments/__init__.pysPygmentsRenderer*s2              /   ccsmdkl}dkl}x|iD]}|dVq'Wx-|D]"}|i|i|i |i fVqCWdS(N(sLEXERS(sfind_plugin_lexersi( spygments.lexers._mappingsLEXERSspygments.pluginsfind_plugin_lexerss itervaluessitemsclssnamesaliasess filenamess mimetypes(sitemsfind_plugin_lexerssclssLEXERS((s:build/bdist.darwin-8.9.1-i386/egg/tracpygments/__init__.pysget_all_lexerss     ccsJdkl}l}x|D] }|VqWx|D]\}}|Vq2WdS(N(sfind_plugin_styless STYLE_MAP(spygments.stylessfind_plugin_styless STYLE_MAPsnames_(s STYLE_MAPsfind_plugin_stylessnames_((s:build/bdist.darwin-8.9.1-i386/egg/tracpygments/__init__.pysget_all_styless (+s__doc__sdatetimesoss pkg_resourcessresource_filenamesrestimes trac.cores trac.configs ListOptionsOptionstrac.mimeview.apisIHTMLPreviewRenderersMimeviews trac.wiki.apisIWikiMacroProviderstrac.util.datefmts http_datestrac.util.htmlsMarkupstrac.websIRequestHandlersIRequestFilterstrac.web.chromesadd_linksITemplateProviderspygmentsspygments.lexerssget_lexer_by_namespygments.formatters.htmls HtmlFormatterspygments.stylessget_style_by_namesTrues have_pygmentss ImportErrorsesFalses__all__s ComponentsPygmentsRenderersget_all_lexerssget_all_styles(sget_style_by_namesIRequestHandlersresource_filenamesdatetimesITemplateProviders http_datespygmentssadd_linksget_all_lexerss ListOptionsget_all_stylessOptions__all__sresIHTMLPreviewRenderers HtmlFormatters have_pygmentssIWikiMacroProvidersget_lexer_by_namesMarkupsIRequestFiltersMimeviewsesPygmentsRendererstimesos((s:build/bdist.darwin-8.9.1-i386/egg/tracpygments/__init__.pys? s4                PK᥺6g-j+tracpygments/templates/pygments_settings.cs

Pygments Settings

The Pygments syntax highlighter can be used with different coloring themes.

Preview

PK62EGG-INFO/dependency_links.txtPK6qI,,<EGG-INFO/entry_points.txtPK6OddEGG-INFO/PKG-INFOPK62EGG-INFO/requires.txtPK66 %QQtEGG-INFO/SOURCES.txtPK6[ EGG-INFO/top_level.txtPK᥺628EGG-INFO/zip-safePK᥺6tQ?( ( htracpygments/__init__.pyPK6ŭR.R.$tracpygments/__init__.pycPK᥺6g-j+OStracpygments/templates/pygments_settings.csPK YX