o k`M$@s"ddlZddlZddlZddlmZddlmZddlZddlmZddl m Z m Z ddl m Z mZddlmZddlTdd lmZmZmZdd lmZmZdd lmZdd lmZmZdd lmZm Z ddl!m"Z"ddl#m$Z$ddl%m&Z&m'Z'ddl(m)Z)m*Z*m+Z+m,Z,dgZ-Gddde.Z/dS)N)datetimeresource_filename) HtmlFormatter)get_all_lexersget_lexer_by_name)get_all_stylesget_style_by_name)ISystemInfoProvider)*) ConfigSection ListOptionOption)IHTMLPreviewRendererMimeview)IPreferencePanelProvider) get_pkginfolazy) http_datelocaltz)Markup_)IRequestHandler HTTPNotFound)ITemplateProvider add_noticeadd_script_dataadd_stylesheetPygmentsRendererc@seZdZdZeeeeee dZ e ddddidZ e dd d d Zedd d ddZdZdZdZdZddZddZddZd2ddZddZddZd d!Zd"d#Zd$d%Zd&d'Zed(d)Z ed*d+Z!ed,d-Z"d3d.d/Z#d0d1Z$dS)4rz8HTML renderer for syntax highlighting based on Pygments.Fzpygments-lexeraConfigure Pygments [%(url)s lexer] options. For example, to set the [%(url)s#lexers-for-php-and-related-languages PhpLexer] options `startinline` and `funcnamehighlighting`: {{{#!ini [pygments-lexer] php.startinline = True php.funcnamehighlighting = True }}} The lexer name is derived from the class name, with `Lexer` stripped from the end. The lexer //short names// can also be used in place of the lexer name. urlz http://pygments.org/docs/lexers/)doc_args mimeviewerpygments_default_styletracz:The default style to use for Pygments syntax highlighting.pygments_modesaList 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.)docTz Hello, world!

Hello, world!

ccsdttdfVdS)NPygmentsversion)rpygmentsgetselfr/8/usr/lib/python3/dist-packages/trac/mimeview/pygments.pyget_system_infogsz PygmentsRenderer.get_system_infoccs.tD]\}}}}|D]}||fVq qdSNr)r.raliases mimetypesmimetyper/r/r0get_extra_mimetypesls  z$PygmentsRenderer.get_extra_mimetypescCs&z|j|dWStyYdSw)Nr)_typesKeyError)r.r6r/r/r0get_quality_ratioqs  z"PygmentsRenderer.get_quality_ratioNc Cs|j}|jd|j}t|d|z t|dkr0|ddd}|j|d}||||WSWdSt t fyAt d|w)Npygments_style/pygments/%s.cssr;r8z+No Pygments lexer found for mime-type '%s'.) reqsessionr, default_stylerlensplitr9 _generater: ValueError Exception) r.contextr6contentfilenamerevr?stylelanguager/r/r0renderxs zPygmentsRenderer.renderccsdtdfVdS)Nr+zSyntax Highlightingr)r.r?r/r/r0get_preference_panelssz&PygmentsRenderer.get_preference_panelscCstt}|jdkr9|jd}|r||vr||jd<n |s'd|jvr'|jd=t|td||j |p6dt |D] }t |d|| dq=|d|j}t||j dd ||jd|j|d fS) NPOSTrKr<z!Your preferences have been saved.r=)titlehtml)rAzprefs_pygments.html)output selectionrAstyles)listrmethodargsr,r@rrredirecthrefprefssortedrrPrDEXAMPLErrA)r.r?panelrTrKrRr/r/r0render_preference_panels&       z(PygmentsRenderer.render_preference_panelcCs*td|j}|r|d|jd<dSdS)Nz/pygments/([-\w]+)\.cssr8rKT)rematch path_infogrouprW)r.r?r`r/r/r0 match_requests zPygmentsRenderer.match_requestc Cs|jd}zt|}Wnty}zt||d}~ww|jd}td|dd|dd}t t j |t }t|}||dkrS|d|dSt|d} d| d | d gd } |d |d d|d||dt| || dS)NrK.z.pyzIf-Modified-Sincei0)rKz z div.code prez table.code tdzutf-8z Content-Typeztext/css; charset=utf-8z Last-ModifiedzContent-Length)rWr rEr __module__rCrjoinr fromtimestampospathgetmtimerr get_header send_response end_headersrget_style_defsencode send_headerrBwrite) r.r?rK style_clsepartsrImtime last_modified formatterrHr/r/r0process_requests6          z PygmentsRenderer.process_requestcCsgSr2r/r-r/r/r0get_htdocs_dirssz PygmentsRenderer.get_htdocs_dirscCs tddgS)Nz trac.mimeview templatesrr-r/r/r0get_templates_dirss z#PygmentsRenderer.get_templates_dirscCs>i}tD]\}}}}|r|dn|}|D]}|||<qq|S)Nrr3)r.lexer_alias_name_map lexer_namer4rnamealiasr/r/r0_lexer_alias_name_maps z&PygmentsRenderer._lexer_alias_name_mapc Csfi}|jD])\}}z |d\}}Wn tyYqw||}||i}||i|q|S)Nrd)pygments_lexer_optionsoptionsrCrE_lexer_alias_to_name setdefaultupdate)r. lexer_optionskeylexer_option_valuelexer_name_or_aliaslexer_option_namer lexer_optionr/r/r0_lexer_optionss  zPygmentsRenderer._lexer_optionsc Csxi}tD]\}}}}|r|dn|}|D] }||jf||<qqd|vr/|d}|r/||d<|t|jd|S)Nrzapplication/javascriptztext/javascriptr+)r QUALITY_RATIOr,rrenvconfigured_modes_mapping) r.typesrr4rr5rr6js_entryr/r/r0r9s zPygmentsRenderer._typesc Cs~||}ddi}||j|i|r||dit|fi|}t}tddd}| | ||t | S)NstripnlFrT )nowrap lineseparator) rrrr,get_hintrioStringIOrformat get_tokensrgetvalue) r.rLrHrGrrlexeroutryr/r/r0rDs   zPygmentsRenderer._generatecCs|j||Sr2)rr,)r.rr/r/r0rsz%PygmentsRenderer._lexer_alias_to_name)NNr2)%__name__rg __qualname____doc__ implementsr rrrris_valid_default_handlerr rrrAr r% expand_tabsreturns_sourcerr\r1r7r;rMrNr^rcrzr{r}rrrr9rDrr/r/r/r0r(sP       )0rrjr_r pkg_resourcesrr+pygments.formatters.htmlrpygments.lexersrrpygments.stylesrr trac.apir trac.core trac.configr r rtrac.mimeview.apirr trac.prefsr trac.utilrrtrac.util.datefmtrrtrac.util.htmlrtrac.util.translationr trac.web.apirrtrac.web.chromerrrr__all__ Componentrr/r/r/r0s,