B
    (d[                 @   sL  d Z ddlZddlZddlZddlZddlmZ ddlmZm	Z	 ddl
mZmZmZmZmZmZmZ ddlmZmZmZmZmZmZ ddlmZ ddlmZmZ dd	lmZm Z m!Z!m"Z"m#Z# dd
l$m%Z% ddl&m'Z'm(Z( ddl)m*Z*m+Z+ ddl,m-Z-m.Z. dd Z/dd Z0dd Z1dd Z2dd Z3dd Z4G dd dej5Z5ej6fddZ7dS )z
    pygments.cmdline
    ~~~~~~~~~~~~~~~~

    Command line interface.

    :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
    N)dedent)__version__	highlight)ClassNotFoundOptionErrordocstring_headlineguess_decodeguess_decode_from_terminalterminal_encodingUnclosingTextIOWrapper)get_all_lexersget_lexer_by_nameguess_lexerload_lexer_from_fileget_lexer_for_filenamefind_lexer_class_for_filename)	TextLexer)LatexEmbeddedLexerLatexFormatter)get_all_formattersget_formatter_by_nameload_formatter_from_fileget_formatter_for_filenamefind_formatter_class)TerminalFormatter)Terminal256FormatterTerminalTrueColorFormatter)get_all_filtersfind_filter_class)get_all_stylesget_style_by_namec          
   C   s   i }| s|S x| D ]x}|  s q|d}x^|D ]V}|  }y$|dd\}}|  }|  }W n tk
r|   d||< Y q0X |||< q0W qW |S )N,=   T)stripsplit
ValueError)Zo_strsoptsZo_strZo_argsZo_argZo_keyZo_val r(   ]/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/pygments/cmdline.py_parse_options!   s"    


r*   c             C   sZ   g }| s|S xH| D ]@}d|krD| dd\}}||t|gf q||i f qW |S )N:r#   )r%   appendr*   )Zf_strsfiltersZf_strfnamefoptsr(   r(   r)   _parse_filters6   s    
r0   c          	   C   s   y| dkr0t |}td|j  tt|j nX| dkr^t|}td|j  tt|j n*| dkrt|}td|  tt|j dS  ttfk
r   td|  t	j
d	 d
S X d S )NlexerzHelp on the %s lexer:	formatterzHelp on the %s formatter:filterzHelp on the %s filter:r   z%s not found!)filer#   )r   printnamer   __doc__r   r   AttributeErrorr&   sysstderr)whatr6   clsr(   r(   r)   _print_helpC   s"    r=   c             C   s  | dkrt   t d t d g }xJt D ]@\}}}}d|d ||rZdd| d p\df}|| q*W |  x|D ]}t d	|  q|W nR| d
kr0t   t d t d g }xPt D ]F}t|}	d|jd |	|jrdd|j d pdf}|| qW |  x|D ]}t d	|  qW n| dkrt   t d t d xt	 D ].}
t
|
}t d|
 d  t dt|  qXW nZ| dkrt   t d t d x8t D ].}
t|
}t d|
 d  t dt|  qW d S )Nr1   zLexers:z~~~~~~~z, r+   z(filenames ) z* %s
    %s %sr2   zFormatters:z~~~~~~~~~~~r3   zFilters:z~~~~~~~~z* z    %sstylezStyles:)r5   r   joinr,   sortr   r   aliases	filenamesr   r   r   r    )r;   infofullnamenamesexts_tupir<   docr6   r(   r(   r)   _print_listW   sR    




rM   c             C   s  dd l }i }d| krHi }x&t D ]\}}}}|||d||< q W ||d< d| kri }x,t D ]"}t|}	|j|j|	d||j< q\W ||d< d| kri }x&t D ]}
t|
}d	t|i||
< qW ||d
< d| kri }x&t	 D ]}
t
|
}d	t|i||
< qW ||d< ||tj d S )Nr   r1   )rC   rD   	mimetypeslexersr2   )rC   rD   rL   
formattersr3   rL   r-   r@   styles)jsonr   r   r   rC   rD   r6   r   r   r   r    dumpr9   stdout)Zrequested_itemsrR   resultrE   rF   rG   rD   rN   r<   rL   r6   r(   r(   r)   _print_list_as_json   s<    
rV   c       &         s
  j r|   dS jr(tdt  dS fdd}jd k	r t }x&t D ]\}}|rT|	| qTW |
d |
d |r| tj dS jstdd	g d
dddh dd jD }t fdd|D r| tj dS |s }jsx |D ]}t| q W nt| dS jrp|dsB| tj dS j\}}	|dkrf| tj dS t||	S tjp|g }
xRjpg D ]B}y|dd\}	}W n tk
r   d|
|< Y n
X ||
|	< qW |
d|
d}|
d|
d}jr*tj}|d krt}t|jd  dS jr|tjj ! }yt"||d}W n t#k
rh   t}Y nX t|jd  dS j$}j%}|d k	r2j&}|s| tj dS j'sj(r| tj dS y||
d< t)|f|
}W n2 t#k
r } zt|tjd dS d }~X Y nX t|*|p(d dS j%d k	rN| tj dS t+j,pZg }t-j.}d }j'}|rf|rd|kry\d }d }	d|kr|/dd\}}	d|	krd }	|r|	rt0||	f|
}nt0|f|
}W n4 t#k
r } ztd|tjd dS d }~X Y nX nJyt1|f|
}W n8 t2t#fk
rd } ztd|tjd dS d }~X Y nX d }j(rj3rtdtjd dS j(}y"t4|d }|! }W d Q R X W n4 t5k
r } ztd!|tjd dS d }~X Y nX |st6|\}}|s:yt7||f|
}W n t#k
r } zTj8rdyt"|f|
}W n  t#k
r`   tf |
}Y nX ntd|tjd dS W d d }~X Y n4 t2k
r } ztd|tjd dS d }~X Y nX n|j3s"tjj ! }|st9|tj\}}|s:yt"|f|
}W n  t#k
r   tf |
}Y nX n|s:td"tjd dS xZ|D ]R\}}y|j:|f| W n4 t#k
r } ztd|tjd dS d }~X Y nX q@W j;}j&}|r|rLd|krLy\d }d }	d|kr|/dd\}}	d|	krd }	|r|	rt<||	f|
}nt<|f|
}W n4 t#k
rH } ztd|tjd dS d }~X Y nX nJyt)|f|
}W n8 t2t#fk
r } ztd|tjd dS d }~X Y nX |r2|syt=|f|
}W n8 t2t#fk
r } ztd|tjd dS d }~X Y nX yt4|d#} W n4 t5k
r. } ztd$|tjd dS d }~X Y nX nX|st>j?d%dd&krXt@f |
}n*d't>j?d(dkrxtAf |
}n
tBf |
}tjCj } |s|r||_DntEtjC|_D|	stjFd)k	r|jGd*k	rtH| |jDd+} d |_Dydd lI}!W n tJk
r   Y nX |!jKjL| d d d,dd-} |
d.d}"tM|"dk	rXtN|tO	rX|"d }#|"d }$tP|#|$|}j3	sztQ||||  W d |	r| R  X dS ztyXxRtjj S }%|%	sP |	st9|%tjd }%tQ|%|||  tT| d/	r| U  	qW dS  tVk
	r   dS X W d |
r| R  X d S )0Nr   uW   Pygments version %s, (c) 2006-2023 by Georg Brandl, Matthäus Chajdas and contributors.c                s    t  fddt D  S )Nc             3   s   | ]\}}| kr|V  qd S )Nr(   ).0kv)optr(   r)   	<genexpr>   s    z5main_inner.<locals>.is_only_option.<locals>.<genexpr>)anyvarsitems)rZ   )argns)rZ   r)   is_only_option   s    z"main_inner.<locals>.is_only_optionLrR      r?   z-Vr1   r2   r3   r@   c             S   s   g | ]}| d qS )s)rstrip)rW   argr(   r(   r)   
<listcomp>   s    zmain_inner.<locals>.<listcomp>c             3   s   | ]}| kV  qd S )Nr(   )rW   re   )allowed_typesr(   r)   r[      s    zmain_inner.<locals>.<genexpr>H)r1   r2   r3   r"   r#   T
inencodingencodingoutencoding)ri   )r4   z.pyr+   zError:z5Error: -s option not usable when input file specifiedrbzError: cannot read infile:z7Error: when using -s a lexer has to be selected with -lwbzError: cannot open outfile:	COLORTERM)	truecolor24bit256TERM)win32cygwin)ZTerminalZTerminal256)rj   F)convertr$   	autoresetwrapescapeinsideflush)Whelp
print_helpVr5   r   ra   setr]   r^   adddiscardr9   r:   rR   mainr\   rM   rV   rh   r=   r*   OPr%   r&   getNr   r   rC   Cstdinbufferreadr   r   Safl	INPUTFILEr   Zget_style_defsr0   Fboolxrsplitr   r   r   rc   open	Exceptionr   r   gr	   
add_filteror   r   osenvironr   r   r   rT   rj   r
   platformr6   r   Zcolorama.initialiseImportErrorZ
initialiseZwrap_streamlen
isinstancer   r   r   closereadlinehasattrry   KeyboardInterrupt)&parserr_   r`   Zarg_setrX   rY   largsre   r;   r6   Zparsed_optsZp_optvalueri   rk   r1   ZinpZS_optZa_optZf_optZfmtererrZF_optsZallow_custom_lexer_formatter	lexernamefilenamecodeZinfninfpr.   r/   ZoutfnoutfileZcoloramarx   leftrightliner(   )rg   r_   r)   
main_inner   s   




















r   c               @   s   e Zd ZdddZdS )HelpFormatterrb      Nc             C   sH   |d kr0yt  jd }W n tk
r.   Y nX tj| |||| d S )Nrb   )shutilget_terminal_sizecolumnsr   argparser   __init__)selfprogindent_incrementmax_help_positionwidthr(   r(   r)   r     s    zHelpFormatter.__init__)rb   r   N)__name__
__module____qualname__r   r(   r(   r(   r)   r     s   r   c             C   s  d}t j|dtd}|d}| }|jdddd |jd	d
dd |jddddd |jdddd |jddddd |jddddd |jdddd |jddd d! |d"}|jd#d
d$d |jd%d
d&d |jd'd
d(d |jd)d*dd
d+ |d,}| }|jd-d.d/d |jd0d1d2d3d4 |jd5d6d7d |jd8d
d9d |jd:d;d<d=d>d? |jd@d
dAd |jdBdCd
dDd |jdEdFdGd || dHdI }y
t||S  tk
r   dJS  t	k
r   |j
r<ttjdK tdLtjdK tdMtjdK tdNtjdK tdOtjdK tdLtjdK ttjdK  dJdIl}	|	jt  }
|
dP  }t|
dQkr|dR|
dS dTdJ  dHdI  7 }ttjdK tdUtjdK t|tjdK tdVtjdK dHS X dIS )Wz(
    Main command line entry point.
    z?Highlight an input file and write the result to an output file.F)descriptionadd_helpformatter_classzMain operationz-lZLEXERz~Specify the lexer to use.  (Query names with -L.)  If not given and -g is not present, the lexer is guessed from the filename.)metavarrz   z-g
store_truez`Guess the lexer from the file contents, or pass through as plain text if nothing can be guessed.)actionrz   z-FzFILTER[:options]r,   znAdd a filter to the token stream.  (Query names with -L.) Filter options are given after a colon if necessary.)r   r   rz   z-fZ	FORMATTERzSpecify the formatter to use.  (Query names with -L.) If not given, the formatter is guessed from the output filename, and defaults to the terminal formatter if the output is to the terminal or an unknown file extension.z-OzOPTION=value[,OPTION=value,...]zyGive options to the lexer and formatter as a comma-separated list of key-value pairs. Example: `-O bg=light,python=cool`.z-PzOPTION=valuezGive a single option to the lexer and formatter - with this you can pass options whose value contains commas and equal signs. Example: `-P "heading=Pygments, the Python highlighter"`.z-oZ
OUTPUTFILEz8Where to write the output.  Defaults to standard output.r   ?z5Where to read the input.  Defaults to standard input.)nargsrz   zOperation flagsz-vzbPrint a detailed traceback on unhandled exceptions, which is useful for debugging and bug reports.z-sa!  Process lines one at a time until EOF, rather than waiting to process the entire file.  This only works for stdin, only for lexers with no line-spanning constructs, and is intended for streaming input such as you get from `tail -f`. Example usage: `tail -f sql.log | pygmentize -s -l sql`.z-xa  Allow custom lexers and formatters to be loaded from a .py file relative to the current working directory. For example, `-l ./customlexer.py -x`. By default, this option expects a file with a class named CustomLexer or CustomFormatter; you can also specify your own class name with a colon (`-l ./lexer.py:MyLexer`). Users should be very careful not to use this option with untrusted files, because it will import and run them.z--jsonz=Output as JSON. This can be only used in conjunction with -L.)rz   defaultr   z*Special modes - do not do any highlightingz-SzSTYLE -f formatterzqPrint style definitions for STYLE for a formatter given with -f. The argument given by -a is formatter dependent.z-L*ZWHATzList lexers, formatters, styles or filters -- give additional arguments for the thing(s) you want to list (e.g. "styles"), or omit them to list everything.)r   r   rz   z-NZFILENAMEzGuess and print out a lexer name based solely on the given filename. Does not take input or highlight anything. If no specific lexer can be determined, "text" is printed.z-CzXLike -N, but print out a lexer name based solely on a given content from standard input.z-Hstorerb   )NAMEZTYPEzrPrint detailed help for the object <name> of type <type>, where <type> is one of "lexer", "formatter" or "filter".)r   r   r   rz   z-VzPrint the package version.z-hz--helpzPrint this help.z-aZARGzKFormatter-specific additional argument for the -S (print style sheet) mode.r#   Nr   )r4   zA*****************************************************************z3An unhandled exception occurred while highlighting.z9Please report the whole traceback to the issue tracker atz.<https://github.com/pygments/pygments/issues>.   z	
   (f%s)
z*** Error while highlighting:z>*** If this is a bug you want to report, please rerun with -v.)r   ArgumentParserr   add_argument_groupadd_mutually_exclusive_groupadd_argument
parse_argsr   BrokenPipeErrorr   rY   r5   r9   r:   	tracebackformat_exceptionexc_infor$   r   r%   )argsdescr   Z	operationZlexerselflagsZspecial_modes_groupZspecial_modesr_   r   rE   msgr(   r(   r)   r     s    





&
r   )8r7   r   r9   r   r   textwrapr   pygmentsr   r   Zpygments.utilr   r   r   r   r	   r
   r   Zpygments.lexersr   r   r   r   r   r   Zpygments.lexers.specialr   Zpygments.formatters.latexr   r   Zpygments.formattersr   r   r   r   r   Zpygments.formatters.terminalr   Zpygments.formatters.terminal256r   r   Zpygments.filtersr   r   Zpygments.stylesr   r    r*   r0   r=   rM   rV   r   r   argvr   r(   r(   r(   r)   <module>	   s2   $ 3,  Q