a
    ;@bZ                     @   sH  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' ddl(m)Z)m*Z* ddl+m,Z,m-Z- dd Z.dd Z/dd Z0dd Z1dd Z2dd Z3G dd dej4Z4ej5fddZ6dS )z
    pygments.cmdline
    ~~~~~~~~~~~~~~~~

    Command line interface.

    :copyright: Copyright 2006-2021 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)get_all_filtersfind_filter_class)get_all_stylesget_style_by_namec              
   C   s   i }| s|S | D ]r}|  sq|d}|D ]T}|  }z$|dd\}}|  }|  }W n tyv   d||< Y q,0 |||< q,q|S )N,=   T)stripsplit
ValueError)Zo_strsZoptsZo_strZo_argsZo_argZo_keyZo_val r&   /lib/python3.9/site-packages/pygments/cmdline.py_parse_options!   s"    
r(   c                 C   sV   g }| s|S | D ]@}d|v rB| dd\}}||t|gf q||i f q|S )N:r"   )r$   appendr(   )Zf_strsfiltersZf_strfnamefoptsr&   r&   r'   _parse_filters6   s    r.   c              	   C   s   z| 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 W dS  ttfy   td|  t	j
d	 Y d
S 0 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)whatr5   clsr&   r&   r'   _print_helpC   s"    r<   c                 C   s  | dkrt   t d t d g }t D ]@\}}}}d|d ||rXdd| d pZdf}|| q(|  |D ]}t d	|  qvnB| d
kr t   t d t d g }t D ]F}t|}	d|jd |	|jrdd|j d pdf}|| q|  |D ]}t d	|  q
n| dkrxt   t d t d t	 D ].}
t
|
}t d|
 d  t dt|  qFnV| dkrt   t d t d t D ].}
t|
}t d|
 d  t dt|  qd S )Nr/   zLexers:z~~~~~~~z, r)   z(filenames ) z* %s
    %s %sr0   zFormatters:z~~~~~~~~~~~r1   zFilters:z~~~~~~~~z* z    %sstylezStyles:)r4   r   joinr*   sortr   r   aliases	filenamesr   r   r   r   )r:   infofullnamenamesZexts_tupir;   docr5   r&   r&   r'   _print_listW   sZ    





rK   c                 C   s  dd l }i }d| v rDi }t D ]\}}}}|||d||< q||d< d| v ri }t D ]"}t|}	|j|j|	d||j< qV||d< d| v ri }t D ]}
t|
}d	t|i||
< q||d
< d| v ri }t	 D ]}
t
|
}d	t|i||
< q||d< ||tj d S )Nr   r/   )rB   rC   	mimetypesZlexersr0   )rB   rC   rJ   Z
formattersr1   rJ   r+   r?   Zstyles)jsonr   r   r   rB   rC   r5   r   r   r   r   dumpr8   stdout)Zrequested_itemsrM   resultrD   rE   rF   rC   rL   r;   rJ   r5   r&   r&   r'   _print_list_as_json   sD    




rQ   c           &         s
  j r|   dS jr(tdt  dS fdd}jd urt }t D ]\}}|rR|	| qR|
d |
d |r| tj dS jstdd	g h d
 dd jD }t fdd|D r| tj dS |s }js|D ]}t| qnt| dS jrb|ds4| tj dS j\}}	|dvrX| tj dS t||	S tjpng }
jp|g D ]@}z|dd\}	}W n ty   d|
|< Y n
0 ||
|	< q~|
d|
d}|
d|
d}jrtj}|d u rt}t|jd  dS jrftjj ! }zt"||d}W n t#yR   t}Y n0 t|jd  dS j$}j%}|d ur$j&}|s| tj dS j'sj(r| tj dS z||
d< t)|fi |
}W n6 t#y
 } zt|tjd W Y d }~dS d }~0 0 t|*|pd dS j%d ur@| tj dS t+j,pLg }t-j.}d }j'}|rl|rd|v rzdd }d }	d|v r|/dd\}}	d|	v rd }	|r|	rt0||	fi |
}nt0|fi |
}W n8 t#y } ztd|tjd W Y d }~dS d }~0 0 nRzt1|fi |
}W n< t2t#fyj } ztd|tjd W Y d }~dS d }~0 0 d }j(rj3rtdtjd dS j(}z8t4|d}|! }W d    n1 s0    Y  W n8 t5y } ztd|tjd W Y d }~dS d }~0 0 |st6|\}}|szzt7||fi |
}W n t#y } zlj8rzt"|fi |
}W n" t#y   tf i |
}Y n0 ntd|tjd W Y d }~dS W Y d }~n@d }~0  t2y } ztd|tjd W Y d }~dS d }~0 0 nj3sbtjj ! }|s"t9|tj\}}|szzt"|fi |
}W n" t#y^   tf i |
}Y n0 n|sztd tjd dS |D ]\\}}z|j:|fi | W n: t#y } z td|tjd W Y d }~ dS d }~0 0 q~j;}j&}|r|rd|v rzdd }d }	d|v r0|/dd\}}	d|	v r0d }	|rP|	rPt<||	fi |
}nt<|fi |
}W n8 t#y } ztd|tjd W Y d }~dS d }~0 0 nRzt)|fi |
}W n< t2t#fy } ztd|tjd W Y d }~dS d }~0 0 |r|sNzt=|fi |
}W n< t2t#fyL } ztd|tjd W Y d }~dS d }~0 0 zt4|d!} W n8 t5y } ztd"|tjd W Y d }~dS d }~0 0 n@|sd#t>j?d$dv rt@f i |
}ntAf i |
}tjBj } |s|r||_CntDtjB|_C|	sbtjEd%v 	rb|jFd&v 	rbtG| |jCd'} d |_Czdd lH}!W n tI	yJ   Y n0 |!jJjK| d d d(dd)} |
d*d}"tL|"dk	rtM|tN	r|"d }#|"d }$tO|#|$|}j3	sz tP||||  W |	r| Q  n|	r| Q  0 dS zzhtjj R }%|%	s
q8|
st9|%tjd }%tP|%|||  tS| d+	r| T  	qW W |
rJ| Q  dS  tU
yr   Y W |
rn| Q  dS 0 W |
r| Q  n|
r| Q  0 d S ),Nr   uW   Pygments version %s, (c) 2006-2021 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>       z5main_inner.<locals>.is_only_option.<locals>.<genexpr>)anyvarsitemsrV   )argnsrV   r'   is_only_option   s    z"main_inner.<locals>.is_only_optionLrM      r>   -V>   r0   r/   r?   r1   c                 S   s   g | ]}| d qS )s)rstriprS   argr&   r&   r'   
<listcomp>   rY   zmain_inner.<locals>.<listcomp>c                 3   s   | ]}| vV  qd S rR   r&   rd   )allowed_typesr&   r'   rX      rY   zmain_inner.<locals>.<genexpr>H)r/   r0   r1   r!   r"   T
inencodingencodingoutencoding)ri   r?   r2   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:Z256ZTERM)win32cygwin)ZTerminalZTerminal256)rj   F)Zconvertr#   Z	autoresetwrapescapeinsideflush)Vhelp
print_helpVr4   r   r_   setr[   r\   adddiscardr8   r9   rM   mainrZ   rK   rQ   rh   r<   r(   OPr$   r%   getNr   r   rB   Cstdinbufferreadr   r   Safl	INPUTFILEr   Zget_style_defsr.   Fboolxrsplitr   r   r   rb   open	Exceptionr   r   gr	   Z
add_filteror   r   osenvironr   r   rO   rj   r
   platformr5   r   Zcolorama.initialiseImportErrorZ
initialiseZwrap_streamlen
isinstancer   r   r   closereadlinehasattrrr   KeyboardInterrupt)&parserr]   r^   Zarg_setrT   rU   Zlargsre   r:   r5   Zparsed_optsZp_optvalueri   rk   r/   inpZS_optZa_optZf_optZfmtererrZF_optsZallow_custom_lexer_formatterZ	lexernamefilenamecodeZinfnZinfpr,   r-   ZoutfnZoutfileZcoloramarq   leftrightliner&   )rg   r]   r'   
main_inner   s   













,"






r   c                   @   s   e Zd ZdddZdS )HelpFormatterr`      Nc                 C   sF   |d u r.zt  jd }W n ty,   Y n0 tj| |||| d S )Nr`   )shutilget_terminal_sizecolumnsr   argparser   __init__)selfprogindent_incrementmax_help_positionwidthr&   r&   r'   r     s    zHelpFormatter.__init__)r`   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 }zt||W S  ty   |j	r(t
tjdJ t
dKtjdJ t
dLtjdJ t
dMtjdJ t
dNtjdJ t
dKtjdJ t
tjdJ  dOdIl}	|	jt  }
|
dP  }t|
dQkr~|dR|
dS dTdO  dHdI  7 }t
tjdJ t
dUtjdJ t
|tjdJ t
dVtjdJ Y dHS 0 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.)metavarrs   z-g
store_truez`Guess the lexer from the file contents, or pass through as plain text if nothing can be guessed.)actionrs   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   rs   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.)nargsrs   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.)rs   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   rs   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storer`   )NAMEZTYPEzrPrint detailed help for the object <name> of type <type>, where <type> is one of "lexer", "formatter" or "filter".)r   r   r   rs   ra   zPrint the package version.z-hz--helpzPrint this help.z-aZARGzKFormatter-specific additional argument for the -S (print style sheet) mode.r"   Nr2   zA*****************************************************************z3An unhandled exception occurred while highlighting.z9Please report the whole traceback to the issue tracker atz.<https://github.com/pygments/pygments/issues>.r      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   r   rU   r4   r8   r9   	tracebackformat_exceptionexc_infor#   r   r$   )argsZdescr   Z	operationZlexerselflagsZspecial_modes_groupZspecial_modesr]   r   rD   msgr&   r&   r'   ry     s    

	&ry   )7r6   r   r8   r   r   textwrapr   Z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   Zpygments.filtersr   r   Zpygments.stylesr   r   r(   r.   r<   rK   rQ   r   r   argvry   r&   r&   r&   r'   <module>   s2   
$ 3,  O