ThirdParty/Pygments/pygments/cmdline.py

Sat, 12 Jan 2019 12:40:14 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 12 Jan 2019 12:40:14 +0100
changeset 6651
e8f3b5568b21
parent 5713
6762afd9f963
permissions
-rw-r--r--

pygments: updated Pygments to 2.3.1.

808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
1 # -*- coding: utf-8 -*-
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
2 """
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
3 pygments.cmdline
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
4 ~~~~~~~~~~~~~~~~
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
5
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
6 Command line interface.
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
7
5713
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
8 :copyright: Copyright 2006-2017 by the Pygments team, see AUTHORS.
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
9 :license: BSD, see LICENSE for details.
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
10 """
4172
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
11
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
12 from __future__ import print_function
2525
8b507a9a2d40 Script changes: Future import added, super calls modified and unicode behavior for str.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 2426
diff changeset
13
6651
e8f3b5568b21 pygments: updated Pygments to 2.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5713
diff changeset
14 import os
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
15 import sys
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
16 import getopt
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
17 from textwrap import dedent
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
18
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
19 from pygments import __version__, highlight
4172
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
20 from pygments.util import ClassNotFound, OptionError, docstring_headline, \
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
21 guess_decode, guess_decode_from_terminal, terminal_encoding
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
22 from pygments.lexers import get_all_lexers, get_lexer_by_name, guess_lexer, \
5713
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
23 load_lexer_from_file, get_lexer_for_filename, find_lexer_class_for_filename
4697
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
24 from pygments.lexers.special import TextLexer
4172
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
25 from pygments.formatters.latex import LatexEmbeddedLexer, LatexFormatter
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
26 from pygments.formatters import get_all_formatters, get_formatter_by_name, \
5713
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
27 load_formatter_from_file, get_formatter_for_filename, find_formatter_class
4697
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
28 from pygments.formatters.terminal import TerminalFormatter
6651
e8f3b5568b21 pygments: updated Pygments to 2.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5713
diff changeset
29 from pygments.formatters.terminal256 import Terminal256Formatter
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
30 from pygments.filters import get_all_filters, find_filter_class
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
31 from pygments.styles import get_all_styles, get_style_by_name
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
32
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
33
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
34 USAGE = """\
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
35 Usage: %s [-l <lexer> | -g] [-F <filter>[:<options>]] [-f <formatter>]
5713
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
36 [-O <options>] [-P <option=value>] [-s] [-v] [-x] [-o <outfile>] [<infile>]
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
37
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
38 %s -S <style> -f <formatter> [-a <arg>] [-O <options>] [-P <option=value>]
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
39 %s -L [<which> ...]
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
40 %s -N <filename>
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
41 %s -H <type> <name>
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
42 %s -h | -V
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
43
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
44 Highlight the input file and write the result to <outfile>.
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
45
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
46 If no input file is given, use stdin, if -o is not given, use stdout.
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
47
4172
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
48 If -s is passed, lexing will be done in "streaming" mode, reading and
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
49 highlighting one line at a time. This will only work properly with
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
50 lexers that have no constructs spanning multiple lines!
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
51
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
52 <lexer> is a lexer name (query all lexer names with -L). If -l is not
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
53 given, the lexer is guessed from the extension of the input file name
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
54 (this obviously doesn't work if the input is stdin). If -g is passed,
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
55 attempt to guess the lexer from the file contents, or pass through as
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
56 plain text if this fails (this can work for stdin).
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
57
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
58 Likewise, <formatter> is a formatter name, and will be guessed from
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
59 the extension of the output file name. If no output file is given,
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
60 the terminal formatter will be used by default.
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
61
5713
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
62 The additional option -x allows custom lexers and formatters to be
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
63 loaded from a .py file relative to the current working directory. For
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
64 example, ``-l ./customlexer.py -x``. By default, this option expects a
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
65 file with a class named CustomLexer or CustomFormatter; you can also
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
66 specify your own class name with a colon (``-l ./lexer.py:MyLexer``).
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
67 Users should be very careful not to use this option with untrusted files,
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
68 because it will import and run them.
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
69
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
70 With the -O option, you can give the lexer and formatter a comma-
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
71 separated list of options, e.g. ``-O bg=light,python=cool``.
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
72
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
73 The -P option adds lexer and formatter options like the -O option, but
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
74 you can only give one option per -P. That way, the option value may
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
75 contain commas and equals signs, which it can't with -O, e.g.
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
76 ``-P "heading=Pygments, the Python highlighter".
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
77
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
78 With the -F option, you can add filters to the token stream, you can
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
79 give options in the same way as for -O after a colon (note: there must
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
80 not be spaces around the colon).
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
81
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
82 The -O, -P and -F options can be given multiple times.
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
83
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
84 With the -S option, print out style definitions for style <style>
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
85 for formatter <formatter>. The argument given by -a is formatter
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
86 dependent.
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
87
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
88 The -L option lists lexers, formatters, styles or filters -- set
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
89 `which` to the thing you want to list (e.g. "styles"), or omit it to
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
90 list everything.
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
91
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
92 The -N option guesses and prints out a lexer name based solely on
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
93 the given filename. It does not take input or highlight anything.
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
94 If no specific lexer can be determined "text" is returned.
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
95
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
96 The -H option prints detailed help for the object <name> of type <type>,
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
97 where <type> is one of "lexer", "formatter" or "filter".
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
98
4172
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
99 The -s option processes lines one at a time until EOF, rather than
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
100 waiting to process the entire file. This only works for stdin, and
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
101 is intended for streaming input such as you get from 'tail -f'.
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
102 Example usage: "tail -f sql.log | pygmentize -s -l sql"
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
103
4697
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
104 The -v option prints a detailed traceback on unhandled exceptions,
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
105 which is useful for debugging and bug reports.
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
106
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
107 The -h option prints this help.
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
108 The -V option prints the package version.
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
109 """
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
110
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
111
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
112 def _parse_options(o_strs):
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
113 opts = {}
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
114 if not o_strs:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
115 return opts
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
116 for o_str in o_strs:
4697
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
117 if not o_str.strip():
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
118 continue
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
119 o_args = o_str.split(',')
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
120 for o_arg in o_args:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
121 o_arg = o_arg.strip()
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
122 try:
4172
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
123 o_key, o_val = o_arg.split('=', 1)
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
124 o_key = o_key.strip()
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
125 o_val = o_val.strip()
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
126 except ValueError:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
127 opts[o_arg] = True
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
128 else:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
129 opts[o_key] = o_val
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
130 return opts
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
131
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
132
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
133 def _parse_filters(f_strs):
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
134 filters = []
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
135 if not f_strs:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
136 return filters
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
137 for f_str in f_strs:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
138 if ':' in f_str:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
139 fname, fopts = f_str.split(':', 1)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
140 filters.append((fname, _parse_options([fopts])))
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
141 else:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
142 filters.append((f_str, {}))
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
143 return filters
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
144
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
145
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
146 def _print_help(what, name):
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
147 try:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
148 if what == 'lexer':
4697
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
149 cls = get_lexer_by_name(name)
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
150 print("Help on the %s lexer:" % cls.name)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
151 print(dedent(cls.__doc__))
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
152 elif what == 'formatter':
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
153 cls = find_formatter_class(name)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
154 print("Help on the %s formatter:" % cls.name)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
155 print(dedent(cls.__doc__))
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
156 elif what == 'filter':
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
157 cls = find_filter_class(name)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
158 print("Help on the %s filter:" % name)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
159 print(dedent(cls.__doc__))
4697
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
160 return 0
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
161 except (AttributeError, ValueError):
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
162 print("%s not found!" % what, file=sys.stderr)
4697
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
163 return 1
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
164
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
165
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
166 def _print_list(what):
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
167 if what == 'lexer':
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
168 print()
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
169 print("Lexers:")
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
170 print("~~~~~~~")
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
171
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
172 info = []
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
173 for fullname, names, exts, _ in get_all_lexers():
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
174 tup = (', '.join(names)+':', fullname,
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
175 exts and '(filenames ' + ', '.join(exts) + ')' or '')
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
176 info.append(tup)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
177 info.sort()
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
178 for i in info:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
179 print(('* %s\n %s %s') % i)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
180
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
181 elif what == 'formatter':
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
182 print()
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
183 print("Formatters:")
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
184 print("~~~~~~~~~~~")
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
185
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
186 info = []
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
187 for cls in get_all_formatters():
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
188 doc = docstring_headline(cls)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
189 tup = (', '.join(cls.aliases) + ':', doc, cls.filenames and
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
190 '(filenames ' + ', '.join(cls.filenames) + ')' or '')
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
191 info.append(tup)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
192 info.sort()
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
193 for i in info:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
194 print(('* %s\n %s %s') % i)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
195
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
196 elif what == 'filter':
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
197 print()
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
198 print("Filters:")
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
199 print("~~~~~~~~")
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
200
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
201 for name in get_all_filters():
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
202 cls = find_filter_class(name)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
203 print("* " + name + ':')
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
204 print(" %s" % docstring_headline(cls))
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
205
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
206 elif what == 'style':
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
207 print()
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
208 print("Styles:")
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
209 print("~~~~~~~")
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
210
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
211 for name in get_all_styles():
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
212 cls = get_style_by_name(name)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
213 print("* " + name + ':')
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
214 print(" %s" % docstring_headline(cls))
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
215
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
216
4172
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
217 def main_inner(popts, args, usage):
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
218 opts = {}
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
219 O_opts = []
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
220 P_opts = []
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
221 F_opts = []
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
222 for opt, arg in popts:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
223 if opt == '-O':
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
224 O_opts.append(arg)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
225 elif opt == '-P':
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
226 P_opts.append(arg)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
227 elif opt == '-F':
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
228 F_opts.append(arg)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
229 opts[opt] = arg
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
230
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
231 if opts.pop('-h', None) is not None:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
232 print(usage)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
233 return 0
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
234
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
235 if opts.pop('-V', None) is not None:
5713
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
236 print('Pygments version %s, (c) 2006-2017 by Georg Brandl.' % __version__)
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
237 return 0
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
238
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
239 # handle ``pygmentize -L``
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
240 L_opt = opts.pop('-L', None)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
241 if L_opt is not None:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
242 if opts:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
243 print(usage, file=sys.stderr)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
244 return 2
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
245
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
246 # print version
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
247 main(['', '-V'])
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
248 if not args:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
249 args = ['lexer', 'formatter', 'filter', 'style']
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
250 for arg in args:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
251 _print_list(arg.rstrip('s'))
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
252 return 0
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
253
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
254 # handle ``pygmentize -H``
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
255 H_opt = opts.pop('-H', None)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
256 if H_opt is not None:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
257 if opts or len(args) != 2:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
258 print(usage, file=sys.stderr)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
259 return 2
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
260
4697
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
261 what, name = args # pylint: disable=unbalanced-tuple-unpacking
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
262 if what not in ('lexer', 'formatter', 'filter'):
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
263 print(usage, file=sys.stderr)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
264 return 2
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
265
4697
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
266 return _print_help(what, name)
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
267
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
268 # parse -O options
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
269 parsed_opts = _parse_options(O_opts)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
270 opts.pop('-O', None)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
271
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
272 # parse -P options
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
273 for p_opt in P_opts:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
274 try:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
275 name, value = p_opt.split('=', 1)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
276 except ValueError:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
277 parsed_opts[p_opt] = True
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
278 else:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
279 parsed_opts[name] = value
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
280 opts.pop('-P', None)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
281
4172
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
282 # encodings
4697
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
283 inencoding = parsed_opts.get('inencoding', parsed_opts.get('encoding'))
4172
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
284 outencoding = parsed_opts.get('outencoding', parsed_opts.get('encoding'))
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
285
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
286 # handle ``pygmentize -N``
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
287 infn = opts.pop('-N', None)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
288 if infn is not None:
4697
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
289 lexer = find_lexer_class_for_filename(infn)
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
290 if lexer is None:
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
291 lexer = TextLexer
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
292
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
293 print(lexer.aliases[0])
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
294 return 0
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
295
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
296 # handle ``pygmentize -S``
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
297 S_opt = opts.pop('-S', None)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
298 a_opt = opts.pop('-a', None)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
299 if S_opt is not None:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
300 f_opt = opts.pop('-f', None)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
301 if not f_opt:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
302 print(usage, file=sys.stderr)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
303 return 2
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
304 if opts or args:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
305 print(usage, file=sys.stderr)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
306 return 2
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
307
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
308 try:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
309 parsed_opts['style'] = S_opt
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
310 fmter = get_formatter_by_name(f_opt, **parsed_opts)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
311 except ClassNotFound as err:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
312 print(err, file=sys.stderr)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
313 return 1
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
314
4697
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
315 print(fmter.get_style_defs(a_opt or ''))
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
316 return 0
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
317
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
318 # if no -S is given, -a is not allowed
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
319 if a_opt is not None:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
320 print(usage, file=sys.stderr)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
321 return 2
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
322
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
323 # parse -F options
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
324 F_opts = _parse_filters(F_opts)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
325 opts.pop('-F', None)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
326
5713
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
327 allow_custom_lexer_formatter = False
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
328 # -x: allow custom (eXternal) lexers and formatters
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
329 if opts.pop('-x', None) is not None:
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
330 allow_custom_lexer_formatter = True
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
331
4172
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
332 # select lexer
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
333 lexer = None
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
334
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
335 # given by name?
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
336 lexername = opts.pop('-l', None)
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
337 if lexername:
5713
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
338 # custom lexer, located relative to user's cwd
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
339 if allow_custom_lexer_formatter and '.py' in lexername:
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
340 try:
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
341 if ':' in lexername:
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
342 filename, name = lexername.rsplit(':', 1)
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
343 lexer = load_lexer_from_file(filename, name,
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
344 **parsed_opts)
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
345 else:
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
346 lexer = load_lexer_from_file(lexername, **parsed_opts)
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
347 except ClassNotFound as err:
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
348 print('Error:', err, file=sys.stderr)
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
349 return 1
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
350 else:
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
351 try:
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
352 lexer = get_lexer_by_name(lexername, **parsed_opts)
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
353 except (OptionError, ClassNotFound) as err:
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
354 print('Error:', err, file=sys.stderr)
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
355 return 1
4172
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
356
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
357 # read input code
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
358 code = None
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
359
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
360 if args:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
361 if len(args) > 1:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
362 print(usage, file=sys.stderr)
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
363 return 2
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
364
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
365 if '-s' in opts:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
366 print('Error: -s option not usable when input file specified',
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
367 file=sys.stderr)
4697
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
368 return 2
4172
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
369
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
370 infn = args[0]
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
371 try:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
372 with open(infn, 'rb') as infp:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
373 code = infp.read()
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
374 except Exception as err:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
375 print('Error: cannot read infile:', err, file=sys.stderr)
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
376 return 1
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
377 if not inencoding:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
378 code, inencoding = guess_decode(code)
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
379
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
380 # do we have to guess the lexer?
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
381 if not lexer:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
382 try:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
383 lexer = get_lexer_for_filename(infn, code, **parsed_opts)
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
384 except ClassNotFound as err:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
385 if '-g' in opts:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
386 try:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
387 lexer = guess_lexer(code, **parsed_opts)
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
388 except ClassNotFound:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
389 lexer = TextLexer(**parsed_opts)
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
390 else:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
391 print('Error:', err, file=sys.stderr)
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
392 return 1
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
393 except OptionError as err:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
394 print('Error:', err, file=sys.stderr)
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
395 return 1
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
396
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
397 elif '-s' not in opts: # treat stdin as full file (-s support is later)
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
398 # read code from terminal, always in binary mode since we want to
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
399 # decode ourselves and be tolerant with it
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
400 if sys.version_info > (3,):
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
401 # Python 3: we have to use .buffer to get a binary stream
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
402 code = sys.stdin.buffer.read()
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
403 else:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
404 code = sys.stdin.read()
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
405 if not inencoding:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
406 code, inencoding = guess_decode_from_terminal(code, sys.stdin)
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
407 # else the lexer will do the decoding
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
408 if not lexer:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
409 try:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
410 lexer = guess_lexer(code, **parsed_opts)
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
411 except ClassNotFound:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
412 lexer = TextLexer(**parsed_opts)
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
413
4697
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
414 else: # -s option needs a lexer with -l
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
415 if not lexer:
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
416 print('Error: when using -s a lexer has to be selected with -l',
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
417 file=sys.stderr)
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
418 return 2
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
419
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
420 # process filters
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
421 for fname, fopts in F_opts:
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
422 try:
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
423 lexer.add_filter(fname, **fopts)
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
424 except ClassNotFound as err:
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
425 print('Error:', err, file=sys.stderr)
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
426 return 1
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
427
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
428 # select formatter
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
429 outfn = opts.pop('-o', None)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
430 fmter = opts.pop('-f', None)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
431 if fmter:
5713
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
432 # custom formatter, located relative to user's cwd
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
433 if allow_custom_lexer_formatter and '.py' in fmter:
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
434 try:
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
435 if ':' in fmter:
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
436 file, fmtername = fmter.rsplit(':', 1)
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
437 fmter = load_formatter_from_file(file, fmtername,
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
438 **parsed_opts)
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
439 else:
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
440 fmter = load_formatter_from_file(fmter, **parsed_opts)
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
441 except ClassNotFound as err:
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
442 print('Error:', err, file=sys.stderr)
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
443 return 1
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
444 else:
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
445 try:
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
446 fmter = get_formatter_by_name(fmter, **parsed_opts)
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
447 except (OptionError, ClassNotFound) as err:
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
448 print('Error:', err, file=sys.stderr)
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
449 return 1
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
450
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
451 if outfn:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
452 if not fmter:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
453 try:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
454 fmter = get_formatter_for_filename(outfn, **parsed_opts)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
455 except (OptionError, ClassNotFound) as err:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
456 print('Error:', err, file=sys.stderr)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
457 return 1
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
458 try:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
459 outfile = open(outfn, 'wb')
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
460 except Exception as err:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
461 print('Error: cannot open outfile:', err, file=sys.stderr)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
462 return 1
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
463 else:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
464 if not fmter:
6651
e8f3b5568b21 pygments: updated Pygments to 2.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5713
diff changeset
465 if '256' in os.environ.get('TERM', ''):
e8f3b5568b21 pygments: updated Pygments to 2.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5713
diff changeset
466 fmter = Terminal256Formatter(**parsed_opts)
e8f3b5568b21 pygments: updated Pygments to 2.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5713
diff changeset
467 else:
e8f3b5568b21 pygments: updated Pygments to 2.3.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5713
diff changeset
468 fmter = TerminalFormatter(**parsed_opts)
4172
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
469 if sys.version_info > (3,):
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
470 # Python 3: we have to use .buffer to get a binary stream
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
471 outfile = sys.stdout.buffer
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
472 else:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
473 outfile = sys.stdout
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
474
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
475 # determine output encoding if not explicitly selected
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
476 if not outencoding:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
477 if outfn:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
478 # output file? use lexer encoding for now (can still be None)
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
479 fmter.encoding = inencoding
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
480 else:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
481 # else use terminal encoding
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
482 fmter.encoding = terminal_encoding(sys.stdout)
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
483
4172
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
484 # provide coloring under Windows, if possible
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
485 if not outfn and sys.platform in ('win32', 'cygwin') and \
4697
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
486 fmter.name in ('Terminal', 'Terminal256'): # pragma: no cover
4172
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
487 # unfortunately colorama doesn't support binary streams on Py3
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
488 if sys.version_info > (3,):
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
489 from pygments.util import UnclosingTextIOWrapper
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
490 outfile = UnclosingTextIOWrapper(outfile, encoding=fmter.encoding)
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
491 fmter.encoding = None
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
492 try:
4172
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
493 import colorama.initialise
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
494 except ImportError:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
495 pass
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
496 else:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
497 outfile = colorama.initialise.wrap_stream(
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
498 outfile, convert=None, strip=None, autoreset=False, wrap=True)
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
499
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
500 # When using the LaTeX formatter and the option `escapeinside` is
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
501 # specified, we need a special lexer which collects escaped text
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
502 # before running the chosen language lexer.
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
503 escapeinside = parsed_opts.get('escapeinside', '')
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
504 if len(escapeinside) == 2 and isinstance(fmter, LatexFormatter):
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
505 left = escapeinside[0]
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
506 right = escapeinside[1]
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
507 lexer = LatexEmbeddedLexer(left, right, lexer)
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
508
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
509 # ... and do it!
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
510 if '-s' not in opts:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
511 # process whole input as per normal...
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
512 highlight(code, lexer, fmter, outfile)
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
513 return 0
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
514 else:
4172
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
515 # line by line processing of stdin (eg: for 'tail -f')...
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
516 try:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
517 while 1:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
518 if sys.version_info > (3,):
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
519 # Python 3: we have to use .buffer to get a binary stream
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
520 line = sys.stdin.buffer.readline()
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
521 else:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
522 line = sys.stdin.readline()
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
523 if not line:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
524 break
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
525 if not inencoding:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
526 line = guess_decode_from_terminal(line, sys.stdin)[0]
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
527 highlight(line, lexer, fmter, outfile)
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
528 if hasattr(outfile, 'flush'):
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
529 outfile.flush()
4697
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
530 return 0
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
531 except KeyboardInterrupt: # pragma: no cover
4172
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
532 return 0
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
533
4172
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
534
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
535 def main(args=sys.argv):
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
536 """
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
537 Main command line entry point.
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
538 """
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
539 usage = USAGE % ((args[0],) * 6)
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
540
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
541 try:
5713
6762afd9f963 Updated Pygments to 2.2.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4697
diff changeset
542 popts, args = getopt.getopt(args[1:], "l:f:F:o:O:P:LS:a:N:vhVHgsx")
4172
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
543 except getopt.GetoptError:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
544 print(usage, file=sys.stderr)
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
545 return 2
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
546
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
547 try:
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
548 return main_inner(popts, args, usage)
4f20dba37ab6 Updated Pygments to 2.0.2.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
549 except Exception:
4697
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
550 if '-v' in dict(popts):
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
551 print(file=sys.stderr)
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
552 print('*' * 65, file=sys.stderr)
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
553 print('An unhandled exception occurred while highlighting.',
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
554 file=sys.stderr)
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
555 print('Please report the whole traceback to the issue tracker at',
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
556 file=sys.stderr)
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
557 print('<https://bitbucket.org/birkenfeld/pygments-main/issues>.',
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
558 file=sys.stderr)
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
559 print('*' * 65, file=sys.stderr)
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
560 print(file=sys.stderr)
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
561 raise
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
562 import traceback
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
563 info = traceback.format_exception(*sys.exc_info())
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
564 msg = info[-1].strip()
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
565 if len(info) >= 3:
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
566 # extract relevant file and position info
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
567 msg += '\n (f%s)' % info[-2].split('\n')[0].strip()[1:]
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
568 print(file=sys.stderr)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
569 print('*** Error while highlighting:', file=sys.stderr)
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
570 print(msg, file=sys.stderr)
4697
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
571 print('*** If this is a bug you want to report, please rerun with -v.',
c2e9bf425554 Updated Pygments to 2.1.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4172
diff changeset
572 file=sys.stderr)
808
8f85926125ef Updated Pygments to version 1.4.0.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 684
diff changeset
573 return 1

eric ide

mercurial